W3 Total Cache+AMPプラグインでnginxが起動しない件を対処【WordPress】

last update 2021年6月16日 3:21
Photo by Matthew Henry from Burst

先日、本番系でのトラブル発生には至らなかったものの、nginx + WordPress + W3 Total Cache + 公式 AMP プラグインで nginx が起動しない症状に出くわしたので、対処方法をシェアしておきます。

テスト系で気が付いたんですよね。

具体的な症状としては、nginx を起動時、以下のようなエラーが出る、というもの。

# systemctl start nginx Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
Code language: PHP (php)

journalctl で詳細を見ると、nginx の設定ファイル上で指定されている "w3tc_amp" 変数が無い、という感じのエラーが出ていました。

-- Unit nginx.service has begun starting up. Jun 12 17:21:01 localhost.localdomain nginx[2189]: nginx: [emerg] unknown "w3tc_amp" variable Jun 12 17:21:01 localhost.localdomain systemd[1]: nginx.service: control process exited, code=exited status=1 Jun 12 17:21:01 localhost.localdomain systemd[1]: Failed to start nginx - high performance web server. -- Subject: Unit nginx.service has failed -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit nginx.service has failed. -- -- The result is failed. Jun 12 17:21:01 localhost.localdomain systemd[1]: Unit nginx.service entered failed state. Jun 12 17:21:01 localhost.localdomain systemd[1]: nginx.service failed.
Code language: JavaScript (javascript)

w3tc というプリフィックスなので、こりゃあ、W3 Total Cache 絡みだろう、と思ったらそのとおり。

WordPress のホームディレクトリ内に W3TC が書き出した「nginx.conf」内にある、以下のリライト設定をエディタで削除したら nginx が起動するように。

if (!-f "$document_root/wp-content/cache/page_enhanced/$http_host/$w3tc_request_uri/_index$w3tc_ua$w3tc_ssl$w3tc_preview$w3tc_amp.html$w3tc_enc") { set $w3tc_rewrite 0; } if ($w3tc_rewrite = 1) { rewrite .* "/wp-content/cache/page_enhanced/$http_host/$w3tc_request_uri/_index$w3tc_ua$w3tc_ssl$w3tc_preview$w3tc_amp.html$w3tc_enc" last; }
Code language: JavaScript (javascript)

目先の設定は以上。

ただし、この設定は、W3 Total Cache の設定の「拡張機能」→「AMP」を無効化しないとまた書かれるので注意。

プラグイン設定ページの説明によると、W3TC の AMP 拡張は minify との互換性のための機能とのこと。この機能をオフにすると、AMP ページの minify もオフになりそうです。

コメントを記入