香川県観音寺市でシステム開発

nginxとPHP-FPMの設定

さくらのVPSにCentOS 8をインストールした覚書です。

今回は、NginxとPHPの設定を行っていきます。

なお本番環境で利用される場合はここにある内容だけを鵜呑みにせずセキュリティ専門家に相談されることをお勧めします。

環境

実施日2020-05-29
サーバさくらのVPS 2G
OSCentOS 8.1
cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)

事前準備

本記事は、下記の2記事の作業が終わってNginxとPHP7.4が既にインストールしているところから始めます。

CentOS 8 にNginxを公式からインストール

CentOS 8 にPHP7.4をインストール

まだの場合は▲を先にご覧ください。

いろいろ確認

# PHP-FPM
vi /etc/php-fpm.conf
# この中で include=/etc/php-fpm.d/*.conf がある

# php-fpm.d
ls -la /etc/php-fpm.d/

# PHP-FPMの設定
vi /etc/php-fpm.d/www.conf

# nginx
vi /etc/nginx/nginx.conf
# この中で include /etc/nginx/conf.d/*.conf; がある

# nginx/conf.d
ls -la /etc/nginx/conf.d/

# default.conf
vi /etc/nginx/conf.d/default.conf
# php-fpm.conf
vi /etc/nginx/conf.d/php-fpm.conf

バーチャルホストの設定

ここでは例として、example.com というドメインで行っていきます。
またこのドメインには専用のユーザーを割り当てます。
ユーザー名は example とします。

ユーザーを作成

useradd example

exampleユーザーに切り替えて色々準備

# 切り替え
su example

# 移動
cd

# 公開鍵認証
mkdir .ssh
chmod 0755 ./.ssh
vi ./.ssh/authorized_keys
chmod 0644 ./.ssh/authorized_keys

# www 以下にweb関連を置く
mkdir www

# ログ
mkdir www/log

# ドキュメントルート
mkdir www/public_html

# rootに戻る
exit

PHP-FPM のユーザーの設定

vi /etc/php-fpm.d/user-example.conf
[example]
listen = /run/php-fpm/user-example.sock
listen.owner = nginx
listen.group = nginx
user = example
group = example
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm/example-slow.log
php_admin_value[error_log] = /var/log/php-fpm/example-error.log
systemctl restart php-fpm
vi /etc/nginx/conf.d/php-fpm-example.conf
upstream php-fpm-example {
    ip_hash;
    server unix:/run/php-fpm/user-example.sock;
}

バーチャルホストの設定
ファイル名はなんでも良いですが、ここでは「vhost-ドメイン.conf」

vi /etc/nginx/conf.d/vhost-example.com.conf
server {
    listen       80;
    server_name  example.com;

    charset UTF-8;

    access_log /home/example/www/log/access.log  main;
    error_log  /home/example/www/log/error.log warn;

    root   /home/example/www/public_html;
    index  main.php index.php index.html index.htm;

    client_max_body_size 16M;

    # Basic認証用の設定を追加
    auth_basic "Restricted";
    auth_basic_user_file /home/example/www/.htpasswd;

    location / {
        set $redirect_url $uri;
        try_files $uri $uri?$args $uri/ /main.php?$uri&$args /main.php?$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass  php-fpm-example;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param REDIRECT_URL $redirect_url;
        fastcgi_buffer_size  128k;
        fastcgi_buffers  256 16k;
        fastcgi_busy_buffers_size  256k;
        fastcgi_temp_file_write_size  256k;
        include  fastcgi_params;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ /\.ht {
        deny  all;
    }
}

バーチャルホストで、PHPの実行ユーザーは変えれるけど、通常ファイルのアクセスユーザーは変えれんっぽいので。 (このあたりもう少し調査は必要)

cat /etc/group | grep nginx

# 両方いるか再確認が必要
usermod -aG nginx example

# ▲は不要で、▼だけでいける気がする(知らんけど)
usermod -aG example nginx

# 確認
cat /etc/group | grep nginx
cat /etc/group | grep example

# グループに x を加える
chmod 0710 /home/example
# エラーチェック
nginx -t

# 再起動
systemctl restart nginx

広告