RockyLinuxで初めてのwordpress#06-nginx+php-fpmインストール【WebARENA Indigo】
※前回までの手順を実施している前提の手順となっています
それでは今回はWEBサーバーとPHPのインストール作業をやってみます。WEBサーバーにはnginxを使用することとします。
本手順ではドメインの設定も行いますが、「wordpress.supisupi.com」というドメインで設定してみようと思います。手順を利用する際には、「wordpress.supisupi.com」という記述をご自身のドメインに置き換えてご利用ください。
※とくに記述がない限りは、リモートサーバー内でrootユーザーとして作業するものとします。
nginxインストール
# インストール
$ dnf -y install nginx
# 確認
$ nginx -v
------
nginx version: nginx/1.14.1
------
→バージョンが表示されればOK
PHPインストール
# リポジトリ
$ dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# インストール
$ dnf -y module install php:remi-7.4
$ dnf -y install php-zip php-mysqlnd oniguruma5php php-mbstring
# 起動
$ systemctl start php-fpm
$ systemctl enable php-fpm
php-fpm設定変更
# デフォルト設定確認
$ egrep -v "^;|^$" /etc/php-fpm.d/www.conf
--------
[www]
user = apache
group = apache
listen = /run/php-fpm/www.sock
listen.acl_users = apache,nginx
listen.allowed_clients = 127.0.0.1
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/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache
--------
→ user, group の設定が「apache」になっていると思うので、「nginx」に変更します。
# 設定変更
$ vi /etc/php-fpm.d/www.conf
※変更箇所のみ抜き出しています。
--------
user = nginx
group = nginx
--------
# 設定確認
$ egrep -v "^;|^$" /etc/php-fpm.d/www.conf
→ 上記の2箇所がnginxに変更されていればOK
# php-fpm再起動
$ systemctl restart php-fpm
# プロセス確認
$ ps -ef | grep php-fpm
-----
root 20159 1 0 17:15 ? 00:00:00 php-fpm: master process (/etc/php-fpm.conf)
nginx 20161 20159 0 17:15 ? 00:00:00 php-fpm: pool www
nginx 20162 20159 0 17:15 ? 00:00:00 php-fpm: pool www
nginx 20163 20159 0 17:15 ? 00:00:00 php-fpm: pool www
nginx 20164 20159 0 17:15 ? 00:00:00 php-fpm: pool www
nginx 20165 20159 0 17:15 ? 00:00:00 php-fpm: pool www
-----
→php-fpmのプロセスがnginxで起動していたらOK
nginx設定
基本設定(nginx.conf)
細かいチューニングはいろいろ調べて試せば良いかと思うので、最初は一旦筆者がよく使う基本設定を記載しておきます。
# nginx.conf
$ vi /etc/nginx/nginx.conf
-----
user nginx;
worker_processes auto;
worker_rlimit_nofile 40000;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 4096;
multi_accept on;
use epoll;
}
http {
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_time"';
access_log off;
error_log /var/log/nginx/error.log crit;
keepalive_timeout 10;
client_header_timeout 10;
client_body_timeout 10;
reset_timedout_connection on;
send_timeout 10;
limit_conn_zone $binary_remote_addr zone=addr:5m;
limit_conn addr 100;
include /etc/nginx/mime.types;
default_type text/html;
charset UTF-8;
gzip on;
gzip_http_version 1.0;
gzip_disable "msie6";
gzip_proxied any;
gzip_min_length 1024;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
open_file_cache max=40000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
-----
↑上記がファイルの全体なので、まるごと削除してコピペして頂ければ問題なし
各種ディレクトリ作成
# ディレクトリ作成
mkdir -p /etc/nginx/sites-enabled
mkdir -p /etc/nginx/sites-available
mkdir -p /usr/local/nginx/vhosts/wordpress.supisupi.com/{logs,htdocs}
バーチャルホスト設定
※ドメインを「wordpress.supisupi.com」とした場合の手順となっています。
$ vi /etc/nginx/sites-available/wordpress.supisupi.com
-----
#=======================================
# wordpress.supisupi.com
#---------------------------------------
server {
listen 80;
server_name wordpress.supisupi.com;
return 301 https://wordpress.supisupi.com$request_uri;
}
server {
listen 443 ssl http2;
server_name wordpress.supisupi.com;
root /usr/local/nginx/vhosts/wordpress.supisupi.com/htdocs;
index index.php index.html;
ssl_certificate /etc/letsencrypt/live/wordpress.supisupi.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/wordpress.supisupi.com/privkey.pem;
ssl_dhparam /etc/ssl/dhparam.pem;
ssl_session_tickets on;
ssl_session_ticket_key /etc/ssl/sslsessionticket.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
access_log /usr/local/nginx/vhosts/wordpress.supisupi.com/logs/access.log main;
error_log /usr/local/nginx/vhosts/wordpress.supisupi.com/logs/error.log warn;
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_max_temp_file_size 0;
fastcgi_buffer_size 8K;
fastcgi_buffers 64 16k;
include fastcgi_params;
}
location ~* \.(ico|css|js|gif|jpe?g|png|woff|svg)(\?[0-9]+)?$ {
expires 7d;
access_log off;
}
# wp-config.php のアクセス禁止
location ~* /wp-config.php {
deny all;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
}
-----
シムリンク作成
# シムリンク作成
$ cd /etc/nginx/sites-enabled/
$ ln -s /etc/nginx/sites-available/wordpress.supisupi.com wordpress.supisupi.com
SSL証明書取得
前提としてDNS設定がされているものとします。
# certbotインストール
$ dnf --enablerepo=epel -y install certbot
# 証明書を取得する
$ certbot certonly --standalone -d wordpress.supisupi.com -m [メールアドレス] --agree-tos
→「Let's Encrypt」のメルマガ的なものを送るために、メールアドレスを利用しても良いかと問われるので、
「Y」でも「N」でもお好きな方をチョイスする
※証明書取得が成功すると、下記の表示が出ます。
------
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/wordpress.supisupi.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/wordpress.supisupi.com/privkey.pem
------
その他SSL設定
# dhparam.pem, sessionticket作成
openssl dhparam -out /etc/ssl/dhparam.pem 4096
openssl rand 48 > /etc/ssl/sslsessionticket_`date +%Y%m%d`.key
ln -s /etc/ssl/sslsessionticket_`date +%Y%m%d`.key /etc/ssl/sslsessionticket.key
nginx起動
# 起動
systemctl start nginx
systemctl enable nginx
アプリ確認
ここまで実施すると、ブラウザからアクセスが可能なはずなので、ドキュメントルートに適当なファイルを設置してブラウザからアクセスしてみます。
# 適当なファイルを設置
echo "Hello World!" > /usr/local/nginx/vhosts/wordpress.supisupi.com/htdocs/index.html
# ブラウザからアクセスしてみる
→「Hello World!」と表示されていればOK
# 作成したファイルを削除する
rm /usr/local/nginx/vhosts/wordpress.supisupi.com/htdocs/index.html
これでnginxとphp-fpmの設定は完了です!