Nginxを設定してWordPressにリバースプロキシする

フロントエンドにNginxのサーバーを立てて、バックエンドのWordPressにリバースプロキシする設定しているときの覚書。

環境: CentOS 6.5, Nginx 1.2.6, WordPress 4.0

システム構成は下図。ポイントは外部と通信するときはHTTPSで暗号化して、内部ではHTTPでやりとりする。

server_structure_https

 

参考サイト

 

以下「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 >