PHPスクリプトの実行時間が通常より長いと、nginxから504タイムアウトメッセージが表示されます。 set_time_limit(0)
はそれを防げないようです! nginxでphp5-fpmを実行しても動作しませんか?もしそうなら、期限を設定するための適切な方法は何ですか?
エラー:
504 Gateway Time-out
nginx/1.2.7
Php-fpmのタイムアウトを設定する方法はいくつかあります。 /etc/php5/fpm/pool.d/www.conf
に、この行を追加しました:
request_terminate_timeout = 180
また、/etc/nginx/sites-available/default
では、問題のサーバーのロケーションブロックに次の行を追加しました。
fastcgi_read_timeout 180;
ロケーションブロック全体は次のようになります。
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 180;
include fastcgi_params;
}
Php-fpmとnginxを再起動するだけで、リクエストのタイムアウトが180秒以下になることはもうありません。
これを試してください link 、これを直す方法についてもっと良い解決法があります。手順は次のとおりです。
nginx.conf
ディレクトリにある/etc/nginx
ファイルを開きます。以下のコードをhttp {
セクションの下に追加します。
client_header_timeout 3000;
client_body_timeout 3000;
fastcgi_read_timeout 3000;
client_max_body_size 32m;
fastcgi_buffers 8 128k;
fastcgi_buffer_size 128k;
注:すでに存在する場合は、それに従って値を変更します。
Nginxとphp5-fpmをリロードします。
$ service nginx reload
$ service php5-fpm reload
エラーが解決しない場合は、値を大きくすることを検討してください。
Nginxによるタイムアウトを防ぐためにPHPを使用することはできません。
もっと時間がかかるようにnginxを設定するには proxy_read_timeout
ディレクティブ を参照してください。
正しい答えはあなたのNginxの設定でfastcgi_read_timeoutを増やすことです。
そのような単純な!
Sudo nano /etc/nginx/nginx.conf
これらの変数をnginx.confファイルに追加します。
http {
# .....
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
そして再起動します。
service nginx reload
ngx_http_proxy_module
に追加のnginx指令(nginx.conf
用)を追加する必要があります。例えば:
proxy_read_timeout 300;
基本的にnginxのproxy_read_timeout
ディレクティブはプロキシのタイムアウトを変更し、FcgidIOTimeout
は静かすぎるスクリプト用で、FcgidBusyTimeout
は実行に時間がかかりすぎるスクリプト用です。
FastCGIアプリケーションを使用している場合も、これらのオプションを増やします。
FcgidBusyTimeout 300
FcgidIOTimeout 250
それからnginxとPHP5-FPMをリロードしてください。
Pleskでは、Webサーバ設定の追加のnginxディレクティブに追加できます。 ).
FastCGIの場合は、Webサーバー設定のHTTP用の追加ディレクティブをチェックインします。
Php-fpmまたは同様のプロセスマネージャを使用している場合、 set_time_limit(0)
を使用しても意味がありません。
set_time_limit
を使用するときには、php-fpm
を使用しないでください。実行タイムアウトを増やすには、これをチェックしてください チュートリアル 。
Php-fpmを使用しているので、fastcgi_finish_request()を利用してリクエストを処理する必要があります。
このような場合に発生する可能性があるタイムアウトは3種類あります。それぞれの答えは、これらの可能性のうちの1つの側面にのみ焦点を当てていることがわかります。それで、私はそれを書き留めようと考えました、それで将来誰かがここで訪れる人がそれぞれの答えを無作為にチェックして、どれがうまくいったかわからなくても成功を得る必要がないように。
各問題の修正は以下のとおりです。
$.ajax({
url: "test.html",
error: function(){
// will fire when timeout is reached
},
success: function(){
//do something
},
timeout: 3000 // sets timeout to 3 seconds
});
nginxクライアントのタイムアウト
http{
#in seconds
fastcgi_read_timeout 600;
client_header_timeout 600;
client_body_timeout 600;
}
nginxプロキシサーバータイムアウト
http{
#Time to wait for the replying server
proxy_read_timeout 600s;
}
だからあなたが必要なものを使用してください。場合によっては、これらすべての構成が必要になるかもしれません。必要だった。