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が動くはず!


