wordpress icon

WordPress ツール/サイトヘルスで「ページキャッシュが検出できない」と表示される。Nginx Fastcgi-cache

Nginx Fastcgi-cacheが動作しているにも関わらず、Wordpress ツール/サイトヘルスで「ページキャッシュが検出できない」と表示される。

WordPress のサイトヘルスでは「検出できない」と表示される

nginx + fastcgi_cache を使っている場合、実際にはキャッシュされていても WordPress のサイトヘルスでは「検出できない」と表示されることがよくあります。

これは WordPress がキャッシュの有無を HTTP ヘッダで判定しているためです。

原因

WordPress のサイトヘルスは、以下のようなヘッダを見て判定します。
• x-cache
• x-cache-enabled
• cf-cache-status
• x-litespeed-cache
• など

しかし、素の nginx fastcgi_cache は キャッシュヒット時に何もヘッダを出しません。

そのため:

実際はキャッシュしている
でも WordPress からは「検出できない」

という状態になります。

解決方法

キャッシュ状態ヘッダを追加する

nginx の設定ファイル内の server または location ブロックに追加します。
				
					add_header X-Cache $upstream_cache_status;
				
			

例:

				
					location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;

    fastcgi_cache WORDPRESS;
    fastcgi_cache_valid 200 301 302 1h;

    add_header X-Cache $upstream_cache_status;
}
				
			

nginx 再起動

変更した設定をNginxで反映させる

				
					sudo nginx -t
sudo systemctl reload nginx
				
			

動作確認

ブラウザPCのターミナルから確認してみる。

				
					curl -I https://example.com
				
			
表示例:
				
					X-Cache: HIT
				
			

初回表示では、キャッシュされていないので、2度以上ターミナルから 

curl -I https://example.com

を行うこと。

重要:fastcgi_cache の正しい除外設定

WordPress では以下を除外しないと問題が出ます:
				
					set $skip_cache 0;

if ($request_method = POST) {
    set $skip_cache 1;
}
if ($query_string != "") {
    set $skip_cache 1;
}
if ($http_cookie ~* "wordpress_logged_in|comment_author") {
    set $skip_cache 1;
}

fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
				
			

リバースプロキシ経由の場合

				
					[Internet]
    ↓
[リバースプロキシ nginx]
    ↓
[バックエンド nginx + fastcgi_cache]
				
			

問題点
1. X-Cache ヘッダがバックエンドで付与される
2. しかしリバースプロキシがそれを引き継がない
3. WordPress は「キャッシュ無し」と判定する

必要な追加設定(プロキシ側)

キャッシュ状態ヘッダを引き継ぐ

リバースプロキシの Nginx設定の location に追加:

				
					proxy_pass https://backend;

proxy_set_header Host $host;
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 $scheme;

# ★ これが重要
proxy_pass_header X-Cache;
				
			

curl では OK なのに WordPressではダメ

curl -I https://example.com ->> X-Cache: HIT

だけど、Wordpress ツール/サイトヘルスでは、ページキャッシュが無いと表示される

おすすめ最適解(シンプル)

バックエンドにこれを入れるだけでOKです:

				
					add_header X-Proxy-Cache $upstream_cache_status always;
add_header Cache-Control "public, max-age=3600";
				
			

WEBサーバーの Nginx 設定のヘッダーについて書かれているところに、上の二行を追加する。

サイトヘルス すばらしい!
WordPress ツール/サイトヘルスで「ページキャッシュが検出できない」と表示される。Nginx Fastcgi-cache

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連コンテンツ

最近の投稿

Post Comments

Post Comments の CSS

テーマHelloには、Post Comments の外観のCSSがないので追加しよう。

WordPress ツール/サイトヘルスで「ページキャッシュが検出できない」と表示される。Nginx Fastcgi-cache