環境構築からWEBアプリ開発・スマホアプリ開発まで。ときには動画制作やゲームも。

supilog
すぴろぐ

RockyLinuxで初めてのwordpress#06-nginx+php-fpmインストール【WebARENA Indigo】

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の設定は完了です!

まとめ