WORDPRESSを使う場合のよくあるマルチWP構成をnginxで対応するには
2019年12月10日Linux Tips, Wordpress, wordpressテクニカル, テクニカル, ノウハウ
nginxでWORDPRESSを単体で使う際の設定はネットを探せば沢山あるが、巷でよくあるのが1つのサイトに複数のWORDPRESSをサブフォルダーにインストールしているケース。このパターンの設定事例は少ない。通常Apacheで使う場合は本体の設定を行えばサブフォルダーに設置したWPは特に特別な設定は不要だが、それ以外のWEBサーバではサブフォルダー毎に設定は必要です。また、最近のサイトは殆どがスマホ対応といえばレスポンシブでサイトを作っているが、未だにPCとスマホを分離して作っているケースも有る。大抵の場合はUser-agentで転送する方法を使っているが、ではnginxで使う場合はどう設定したらよいかわからない人も多いと思うので設定例を紹介したいと思う。もうちょっと見直せばよかったけど。。。若干冗長な設定もあるのですがご勘弁を。。。php-fpmの設定については今回省略しています。
フォルダー構成
nginx本体設定
/etc/nginx/nginx.confの編集です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 70; } http { include /etc/nginx/mime.types; default_type application/octet-stream; gzip on; gzip_http_version 1.0; gzip_types text/plain text/xml text/css application/xml application/xhtml+xml application/rss+xml application/atom_xml application/javascript application/x-javascript application/x-httpd-php; gzip_min_length 1000; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 45; #gzip on; include /etc/nginx/conf.d/*.conf; } |
仮想サーバ本体設定WORDPRESS用
/etc/nginx/conf.d/fast.confの編集です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
server { listen 80; server_name www.testfast.net; rewrite ^ https://$server_name$request_uri? permanent; } server { listen 443 ssl http2; server_name www.testfast.net; index index.php ; root /var/www/html; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log; index index.html index.php; charset utf-8; ssl_certificate /etc/nginx/cert_2019/full.crt; ssl_certificate_key /etc/nginx/cert_2019/server.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED'; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_session_timeout 10m; ssl_dhparam /etc/nginx/dhparam.pem; ssl_stapling on; add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload'; location / { index index.php index.html index.htm; #User-Agentで判断してモバイルコンテンツへ転送 if ($http_user_agent ~* "iPhone|iPod|iPad|Android|Windows.*Phone") { set $flag "X"; } if ($request_uri !~ ^/mobile) { set $flag "${flag}Z"; } if ($flag = "XZ") { rewrite ^/(.*) https://www.testfast.net/mobile/$1 last; } try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { root /var/www/html; try_files $uri =404; expires off; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; include fastcgi_params; fastcgi_param REMOTE_ADDR $http_x_real_ip; fastcgi_param HTTPS on; fastcgi_pass_header "X-Accel-Redirect"; fastcgi_pass_header "X-Accel-Buffering"; fastcgi_pass_header "X-Accel-Charset"; fastcgi_pass_header "X-Accel-Expires"; fastcgi_pass_header "X-Accel-Limit-Rate"; } include conf.d/sub/blog.conf; include conf.d/sub/community.conf; } |
/blogフォルダーにあるWORDPRESS用設定
/etc/nginx/conf.d/sub/blog.confの編集です。
1 2 3 4 5 6 7 8 9 10 |
location /blog { root /var/www/html; access_log /var/log/nginx/blog.access.log; error_log /var/log/nginx/blog.error.log; try_files $uri $uri/ /blog/index.php?q=$uri&$args; include conf.d/sub/common.conf; } |
/communityフォルダーにあるWORDPRESS用設定
/etc/nginx/conf.d/sub/community.confの編集です。
1 2 3 4 5 6 7 8 9 10 |
location /community { root /var/www/html; access_log /var/log/nginx/community.access.log; error_log /var/log/nginx/community.error.log; try_files $uri $uri/ /community/index.php?q=$uri&$args; include conf.d/sub/common.conf; } |
アクセス制御用の共通設定
/etc/nginx/conf.d/sub/common.confの編集です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
index index.php; charset utf-8; # アクセス拒否設定 location ~* /(wp-config|xmlrpc)\.php { deny all; } # アクセス制限設定 location ~* /wp-login\.php|/wp-admin/((?!admin-ajax\.php).)*$ { allow 120.xxx.10.xxx; allow 127.0.0.1; # 上記以外はアクセス拒否 deny all; include conf.d/sub/fastcgi.conf; } |
fastcgi用の共通設定
/etc/nginx/conf.d/sub/fastcgi.confの編集です。
1 2 3 4 5 6 7 |
location ~\.php$ { fastcgi_split_path_info ^(.+\.php)(.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; include fastcgi_params; } |