Nginx + WordPressで、爆速が期待できる、リバースプロキシ+プロキシキャッシュ。
Nginx とWordPressで、ちょっとした設定が必要です。
「proxy_set_header」関係を設定する必要があります。
Nginx設定
proxy_passにて、Proxyを設定します。
proxy_cacheにて、キャッシュを指定します。
upstream backend { server 127.0.0.1:8010; } server { listen 443 ssl http2; server_name (FQDN); ssl_certificate /etc/letsencrypt/live/(FQDN)/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/(FQDN)/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/(FQDN)/fullchain.pem; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-Port 443; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect http:// https://; proxy_pass http://backend; proxy_cache c_zone; add_header X-Cache-Status $upstream_cache_status; } } server { listen 8010; (略) location ~ \.php$ { root /var/www/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
↑設定は、割愛しています。
proxy_set_header
というコマンドで、proxy側へ情報を伝えます。
proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-Port 443; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect http:// https://;
上記の部分が重要
Proxy キャッシュのチェック
本当にキャッシュが効いているのだろうか・・・
こんな疑問がを解消してくれるのが
add_header X-Cache-Status $upstream_cache_status;
という設定。
上記は、Proxyキャッシュが有効に働いているかをチェックするに使います。
# curl https://(アドレス)/ -v
と、「curl」コマンドに、「-v」を付けて、実行してみます。
最初は
X-Cache-Status: MISS
と、出るかもしれません。
これは、「キャッシュにヒットしなかった」
ということです。
もう一度、
# curl https://(アドレス)/ -v
のコマンドを打ちます。
X-Cache-Status: HIT
と、出てきます。キャッシュにヒットした!
と言うことになります。
これで、proxyキャッシュが正常に稼働していることがわかります。
WordPress Nginx Proxy対応
wp-config.phpの最後の方で、
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST']; $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR']; define('FORCE_SSL_ADMIN', true); $_SERVER['HTTPS'] = 'on';
と、記述します。
SSLが前提の記述です。
これで、問題なく、WordPressが動くはず!