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

【nginx】WordPress の wp-cron.php が動きませんの!!!→直しましたわ♪【ただし不完全】

wp-cron.php を動かすことには成功しましたが、ログへの記録を残らないようにする点について、失敗しています><。

wp-cron.php を再び動かすポイント

  • 【nginx】【WordPress】wp-cron.php アクセス時はログに残さないようにしました♪ | oki2a24 の投稿で、wp-cron.php アクセス時のログを記録しないように変更した、つもりだった
  • 実際には、ログに記録しない後、なにも記述しない = ないも動作しない、という意味であった
  • location ディレクティブ内に入ると、内部の設定を処理した後は処理が終了する。ディレクティブ外の処理を続けて実行しない
  • プロキシサーバ側に wp-cron.php のログを残さない設定を書いていたが、ウェブサーバ側に wp-cron.php の設定を移動した

/etc/nginx/conf.d/default.conf 修正ポイント!

次を削除しましたわ。

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

これで、ログへの記録をオフにしたつもりでその後の処理がなにもないために wp-cron.php へのアクセス自体がされなくなっていた設定を消すことができましたの。

続いて、プロキシサーバ設定の server ディレクションではなく、ウェブサーバ設定の server ディレクションに次を追加いたしました。

    # 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";
        }
    }

PHP-FPM 設定部分は直後にまったく同じものが登場いたします><。気持ち悪いですの><。

ですけれども、nginx 設定は、別ファイルに切り分けることはできても、関数に切り分けるということができないようですわ。まだ別ファイルに切り出したくありませんので、仕方なしに同じことを2度書いております。

なぜ wp-cron.php が動いていないことに気がついたか?

  • 公開予定日時を過ぎても、予約投稿したポストが公開されなかった。
  • BackWPup でスケジュールしたバックアップが動作していない。

時間が来ても公開されなかった投稿は、「更新」をクリックすることで無事公開されましたわ♪

こんなことが2回続きましたので、さすがにおかしいと思いましたの。そういえば、wp-cron.php へのアクセスをログに記録されないようにしましたわね、と思い浮かびました。

WordPress の cron で動いているものといいますと、、、BackWPup プラグインが wp-cron.php を利用しておりますわ!ログはどのようになっているかしら?

と確認してみますと、wp-cron.php へのアクセスをログに記録されないように nginx 設定を変更してからバックアップがされておりませんの><。

そのようなわけで、先日の wp-cron.php アクセスをログに記録しないようにするはずの nginx 設定ファイルの変更が、wp-cron.php へのアクセスを遮断する設定となっておりましたことが判明したのでした><。

最後に、修正した /etc/nginx/conf.d/default.conf 全体を掲載♪

# ドキュメントルート
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; }
    # 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       80;
    listen unix:/var/run/nginx.sock; 
    # WordPress カスタム パーマネントリンク対応
    try_files $uri $uri/ /index.php?q=$uri&$args;

    # 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";
        }
    }

    # 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";
    }
}

おわりに

nginx では最近いつもお世話になっております、すばらしいこのサイトでも、確かに wp-cron.php などのアクセスを判定した後に php-fpm への接続設定を丁寧に書いております。

なぜかしら?と思ったのですけれども、わたくしたちは何回も同じこと書くのいやですの!と無視したのですわね><。

反省ですの。えへへ。

以上です。

コメントを残す