カテゴリー
コンピューター

【nginx】WordPress の cron アクセスをログに残さないのは諦めて nginx 設定ファイルを整理!

wp-cron.php へのアクセスログを残さないようにできなかった。。。失敗のポイント!?

  • プロキシではなくウェブサーバの server コンテキストに wp-cron のログを残さないための location ディレクティブを書いた。
  • try_files は wp-cron の location ディレクティブと並ぶ同じ階層にあるが、これによって URL が書き換わり、wp-cron の location ディレクティブの条件に一致しなくなるのではないか?
  • try_files をウェブサーバ server コンテキストからプロキシサーバの server コンテキストに移してみた。。。パーマリンクのリライトが上手く働かず、エラーとなった。

以上の失敗を経て、wp-cron 部分に関する nginx 設定を削除いたします。ついでですので、別の箇所も少し見なおして修正いたしました♪

/etc/nginx/conf.d/default.conf の整理した内容♪

proxy_cache_path のコメントとオプションの順番を変更。inactive の期間を 1440m (=1日) から 3d (=3日) に変更。

オプションの順番は、参考書籍の『マスタリングnginx』に合わせたかったらですわ。そして、inactive の期間を 3日 に伸ばしたのは、キャッシュサイズが max_size に迫ることがなかったためということがひとつですの。

そして、WordPress プラグイン Nginx Cache Controller の「キャッシュ有効期間」が1日のため、結局は1日で削除されてしまうわけですけれどもそれはともかく、プラグインにのみ削除させたいと考えましたので、余裕を持って3日といたしました。

# キャッシュしたファイルが保管されるパスと、キャッシュゾーンの名前、容量を指定
# キャッシュ保管ディレクトリ
# keys_zone=name:size メタデータを格納する共有メモリ領域と、そのサイズ
# levels キャッシュを保存するサブディレクトリ階層の深さ
# inactive アクセスの無いキャッシュを削除するまでの期間
# max_size ゾーン内に保存できるキャッシュ最大値
proxy_cache_path  /var/cache/nginx keys_zone=czone:32m levels=1:2 inactive=3d max_size=256m;

キャッシュされた指定レスポンスコードのコンテンツの有効期限を 30m から 1d へ変更

こちらも、キャッシュサイズの上限に余裕がありますことと、プラグインのキャッシュ有効期間が1日ですので長くいたしました。

# キャッシュされた指定レスポンスコードのコンテンツの有効期限
proxy_cache_valid 200 404 1d;

wp-cron へのアクセスはログへの記録オフを削除

先日加えました設定を削除いたします><。以下の部分ですわね♪

    # wp-cron へのアクセスはログへの記録オフ
    location ~ /wp-cron.php {
        access_log off;
        log_not_found off;
        # PHP-FPM 設定
        location ~ \.php$ {
            fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
            fastcgi_pass_header "X-Accel-Redirect";
            fastcgi_pass_header "X-Accel-Buffering";
            fastcgi_pass_header "X-Accel-Charset";
            fastcgi_pass_header "X-Accel-Expires";
            fastcgi_pass_header "X-Accel-Limit-Rate";
        }
    }

現在の /etc/nginx/conf.d/default.conf

# ドキュメントルート
root   /var/www/html/oki2a24.com;
# インデックスファイル指定
index  index.php index.html index.htm;

# キャッシュしたファイルが保管されるパスと、キャッシュゾーンの名前、容量を指定
# キャッシュ保管ディレクトリ
# keys_zone=name:size メタデータを格納する共有メモリ領域と、そのサイズ
# levels キャッシュを保存するサブディレクトリ階層の深さ
# inactive アクセスの無いキャッシュを削除するまでの期間
# max_size ゾーン内に保存できるキャッシュ最大値
proxy_cache_path  /var/cache/nginx keys_zone=czone:32m levels=1:2 inactive=3d max_size=256m;
# 利用するキャッシュゾーンの名前を指定
proxy_cache czone;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# キャッシュされた指定レスポンスコードのコンテンツの有効期限
proxy_cache_valid 200 404 1d;

# プロキシサーバ設定
server {
    listen 80 default_server;

    # ドットファイルへのアクセスを禁止、ログへの記録オフ
    location ~ /\. {deny all; access_log off; log_not_found off; }
    # robots.txt へのアクセスはログへの記録オフ
    location = /robots.txt  { access_log off; log_not_found off; }
    # favicon へのアクセスはログへの記録オフ
    location = /favicon.ico { access_log off; log_not_found off; }
    # JavaScript CSS 画像へのアクセスはログへの記録オフ、直ちにプロキシに通しキャッシュ。
    # この期の設定でアクセス元の状態で複数キャッシュを行うが画像ファイルなどは複数キャッシュさせない
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        log_not_found off;
        proxy_pass http://unix:/var/run/nginx.sock;
    }

    # プロキシキャッシュ設定
    # 初期値はキャッシュするにセット
    set $do_not_cache 0;

    # GET 時以外はキャッシュしない
    if ($request_method != "GET") {
        set $do_not_cache 1;
    }

    # .php ファイルへ直接アクセスがあるのは基本的に管理ページのみのためキャッシュしない
    if ($uri ~* "\.php$") {
        set $do_not_cache 1;
    }

    # クッキーから、コメント書き込み中、ログイン中、パスワード保護コンテンツはキャッシュしない
    if ($http_cookie ~ ^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$) {
        set $do_not_cache 1;
    }

    # 今まで組み立てたプロキシ設定でキャッシュを実行
    location / {
        proxy_no_cache $do_not_cache;
        proxy_cache_bypass $do_not_cache;
        proxy_cache_key "$scheme://$host$request_uri";
        proxy_pass http://unix:/var/run/nginx.sock;
    }
 
}

# ウェブサーバ設定
server {
    # ポートを指定
    listen unix:/var/run/nginx.sock; 

    # WordPress カスタム パーマネントリンク対応
    try_files $uri $uri/ /index.php?q=$uri&$args;

    # PHP-FPM 設定
    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
        fastcgi_pass_header "X-Accel-Redirect";
        fastcgi_pass_header "X-Accel-Buffering";
        fastcgi_pass_header "X-Accel-Charset";
        fastcgi_pass_header "X-Accel-Expires";
        fastcgi_pass_header "X-Accel-Limit-Rate";
    }
}

おわりに

wp-cron へのアクセスログだけを除く設定は、なにが悪いのか探求中ですわ。

まだまだ勉強不足ですの><。

以上です。

コメントを残す