サイトアイコン Lonely Mobiler

Local WP に API アクセスするとタイムアウトになる問題への対処方法

WordPress サイトを新たに作成しようと Local を利用して自分の PC に環境を構築したが、API アクセスを行うと必ず timeout する現象に遭遇した。

WordPress を自分のPCで動かすソフト Local を使ってみた | Lonely Mobiler

正確に言うと 以下のように API アクセスを同じ URL に対して連続して行うと二回目のアクセスが必ず timeout になるという状態だ。

require_once( '../public/wp-load.php' );

# test $posts = wp_remote_get('http://example.local/wp-json/wp/v2/posts'); var_dump($posts); $posts = wp_remote_get('http://example.local/wp-json/wp/v2/posts'); var_dump($posts); // timeout exit;

エラーメッセージは以下の通り。

cURL error 28: Operation timed out after 5006 milliseconds with 0 bytes received

wp_remote_get に対して timeout の値を 0 や極端に大きな数字などに設定したり、各関数の間に sleep をいれても同様に timeout が出る。wp_remote_get ではなく cURL 関数を利用したり、file_get_contents のような他のアクセス方法でも同様。ただし、ターミナルから curl コマンドを連続で行ったり、ブラウザから同じ URL に対して F5 連打した場合は特に問題はなし。

対処法だが、web サーバーをデフォルトの nginx から apache に変更すると正常にアクセスできる。

nginx でのみ発生するのでサーバー側の設定だとは思うのだが、設定ファイルを見てもよくわからず。nginx では連続したアクセスの制限を行う limit_req_zone という設定があるが、タイムアウトではなく 503 が返るようだ。

まぁこういうコードを書くなという話ではあるのだが、プログラムでループ回しているとこのようなケースも出てくる。とりあえず対処できたということで良しとする。

Sponsored Link
モバイルバージョンを終了