カテゴリー
WordPress

【nginx】【WordPress】wp-cron.php アクセス時はログに残さないようにしました♪

★追記★本投稿の設定により、 wp-cron アクセスのログは残らないようになりますが、wp-cron も動かなくなります><。

はじめに

Logwatch ログを拝見しておりましたら、次のようなログがたくさん見られました。

    499 (undefined)
       /wp-cron.php?doing_wp_cron=1403803446.1112749576568603515625: 2 Time(s)
… 略 …

wp-cron は記事の自動公開や BackWPup のトリガーなど、スケジュール周りで動いてくださる、大変便利な存在です♪

決して攻撃ではありません。ですけれども、Logwatch さんは少し誤解しているようですの><。

ですから、Logwatch にキャッチされる以前に、nginx のログとして残さないようにいたしますわ♪

/etc/nginx/conf.d/default.conf の修正内容♪

プロキシサーバ設定をしている server コンテキストに、wp-cron へのアクセスはログへ残さないように 1 行追加いたしました♪

# wp-cron へのアクセスはログへの記録オフ
location ~ /wp-cron.php { access_log off; log_not_found off; }

全体といたしましては、次のようになりました。

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

# キャッシュしたファイルが保管されるパスと、キャッシュゾーンの名前、容量を指定
# キャッシュ保管場所 /var/cache/nginx
# キャッシュを保存するサブディレクトリ階層の深さ 1:2
# キャッシュゾーン czone メモリの割当量 32m
# ゾーン内に保存できるキャッシュ最大値 256m
# アクセスの無いキャッシュを削除するまでの期間 1440m
proxy_cache_path  /var/cache/nginx levels=1:2 keys_zone=czone:32m max_size=256m inactive=1440m;
# 利用するキャッシュゾーンの名前を指定
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;
# ステータスコードが通常応答の「200」と、ファイルが存在しない「404」の場合30分間キャッシュを保持
proxy_cache_valid 200 404 30m;

# プロキシサーバ設定
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; }
    # wp-cron へのアクセスはログへの記録オフ
    location ~ /wp-cron.php { 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;
    # .php ファイルへ直接アクセスがあるのは基本的に管理ページのみのためキャッシュしない
    if ($uri ~* "\.php$") {
        set $do_not_cache 1;
    }

    # POST 時はキャッシュしない
    if ($request_method = POST) {
        set $do_not_cache 1;
    }

    # $proxy_cache_key に任意の文字を加えることで別のキーでページをキャッシュ可能にする
    set $proxy_cache_key "$scheme://$host$request_uri";

    # ログイン状態またはコメントを記入したことがあれば、その情報ごとにキャッシュを分ける
    if ($http_cookie ~ "(wordpress_logged_in_|comment_author_)(.*)") {
        set $proxy_cache_key "$2::$proxy_cache_key";
    }

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

# ウェブサーバ設定
server {
    # ポートを指定
    #listen       80;
    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";
    }
}

ログをチェック!して止まったことを確かめましょうね♪

Logwatch で翌日、翌々日のレポートを確認してもよいのですけれども、現在記録しているログを直接確かめましたの♪

grep 499 /var/log/nginx/access.log

ある時刻を堺に、ぴたりと止まっておりますわね♪きっと成功ですの!

それにいたしましても、アクセスのたびに wp-cron が動くとして、499 エラーとなるのは毎回ではなく、10 分程度間隔でしたのが、興味深かったですの♪

おわりに

次のページが大いに参考になりましたの♪以前にお世話になったページですわ♪nginx 導入時からこのページに出会えていれば、もっと速く、もっとスッキリ理解できましたのに><。でも、やっと出会えて嬉しいですの♪感謝いたします。

それから、参考書も役に立ちました。やっぱり買い求めて良かったですの♪

P23 2.6 ロケーション

表2-7 ロケーションの修飾子
~ リクエストされたURIに対し、uri文字列で指定された、大文字小文字を区別する正規表現による マッチが行われる

P91 6.2 HTTP coreモジュール

表6-2 HTTPログ出力ディレクティブ

access_log アクセスログのパスとログ出力の内容を指定する。1番目のパラメータはログが格納されるファイルのパス名である。パス名は変数で指定してもよい。offという特別な値を指定するとアクセスログが無効になる。… 略 …

log_not_found エラーログに404エラーの記録を無効にする(デフォルト値はon)

また、499 エラーについては、次のページでイメージを沸かすことができました。ありがとう存じます!

以上です。

コメントを残す