Nginxを設定してWordPressにリバースプロキシする
フロントエンドにNginxのサーバーを立てて、バックエンドのWordPressにリバースプロキシする設定しているときの覚書。
環境: CentOS 6.5, Nginx 1.2.6, WordPress 4.0
システム構成は下図。ポイントは外部と通信するときはHTTPSで暗号化して、内部ではHTTPでやりとりする。
参考サイト
以下「https://hoge.com/demo/」アクセスしたときにweb01のWordPressを表示する設定。
SSLのバージョンに注意。
lv01のnginx設定
server {
listen 80;
server_name hoge.com www.hoge.com;
return 301 https://hoge.com$request_uri;
}server {
listen 443 ssl;
server_name hoge.com;root /home/httpd/httpdocs/;
#
# SSL
#
ssl on;
ssl_certificate /etc/nginx/ssl.d/2014_hoge_cert.pem;
ssl_certificate_key /etc/nginx/ssl.d/2014_hoge_nopass_key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
ssl_prefer_server_ciphers on;
#
# Header
#
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;location /demo {
proxy_pass http://web01.hoge.com;
}
}
「web01.hoge.com」はhostsファイルで名前解決する。
web01のnginx設定
server {
listen 80;
server_name .hoge.com;root /home/httpd/hoge/web;
index index.php index.html;
charset utf-8;
#
# Include other config files
#
include /etc/nginx/conf.d/common/location_default.conf;
include /etc/nginx/conf.d/hoge/*.conf;
}
hoge/01_demo.conf
#
# Demo
#
location /demo {
alias /home/httpd/hoge/web-demo;access_log /var/log/nginx/hoge_demo.access.log;
error_log /var/log/nginx/hoge_demo.error.log;# PHP-FPM
location ~* \.php$ {
fastcgi_split_path_info ^/demo(.+\.php)(.*)$;
include /etc/nginx/conf.d/common/fastcgi_php.conf;
}# Rewrite for WordPress
if (!-e $request_filename) {
rewrite ^/demo/(.*)$ /demo/index.php?q=$1 last;
}
}
common/fastcgi_php.conf
#
# fastcgi for PHP-FPM
#
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
include fastcgi_params;
fastcgi_buffer_size 1024k;
fastcgi_buffers 4 1024k;
client_max_body_size 5M;
common/location_default.conf
#
# Log Off
#
location ~ /robots.txt { access_log off; log_not_found off; }
location ~ /favicon.ico { access_log off; log_not_found off; }location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
最後にweb01のWordPressのwp-config.phpに追記する。
/**
* If WordPress is behind reverse proxy which proxies https to http.
*/
if ( !empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) {
$_SERVER['HTTPS'] = 'on';
}
これをしないとweb01から見たらhttpアクセスなのでhttpsにリダイレクトし続ける。
LV01からWeb01のPHP-FPMへ直接処理投げてもいいかもしれない。
< Related Posts >