Webサイトを開くと、502無効なゲートウェイエラーが発生します。エラーログファイルを調べた後、/var/log/nginx/error.log
「アップストリームからレスポンスヘッダを読み込んでいる間、アップストリームは接続を早期に終了しました」と呼ばれます。
nginx.conf
文書の内容:
#user nginx;
worker_processes 1;
#error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;
#pid /var/run/nginx.pid;
events {
worker_connections 10240;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
client_header_timeout 600;
client_body_timeout 600;
send_timeout 6000;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
keepalive_timeout 36500;
proxy_read_timeout 1250000;
proxy_connect_timeout 1250000;
fastcgi_read_timeout 1250000;
#tcp_nodelay on;
#gzip on;
#gzip_disable "MSIE [1-6]\.(?!.*SV1)";
server_tokens off;
include /etc/nginx/conf.d/*.conf;
この問題をどのように解決しますか?
答え1
私も同じ問題がありましたが、私たちのウェブサイトの視聴者の数が増えたので、最初はここで見つけることができるすべての提案をしました。ゲートウェイタイムアウトの問題を解決するには?「そして、ここでSOの他のサイトにもまだ同じ502ゲートウェイエラーの問題がありました。したがって、私が作業しているサーバーにサイトとapiendが同じサーバーにあることを知り、apiendを別のサーバーに移動しました。サーバーが実行中です。クライアント上のイベントこれがますます多くなり、502ゲートウェイタイムアウトの問題が再び発生し、Webサイトが502状態にある間にapiendが応答を続けながら、より多くの要求を受信するまで、これはうまくいきました。
だから私はphp-fpm.logをチェックし、次のエラーが表示されるまですべてのサーバーログをチェックしてみました。
[26-Mar-2015 10:10:04] WARNING: [pool www] server reached pm.max_children setting (35), consider raising it
[26-Mar-2015 12:04:52] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers)
私のphp-fpm.logに示すように、max_children設定を上げる必要があります/etc/php5/fpm/pool.d/www.conf
。現在の設定は次のとおりです。
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 4
pm.max_spare_servers = 8
このコマンドを使用して:ps -ylC php5-fpm --sort:rss
php-fpmのプロセスあたりの平均メモリ使用量をキロバイト単位で確認し、pm.max_childrenを計算します。
pm.max_children 計算
たとえば、クラウドサーバーに4 GBのRAMがあり、少なくとも1 GBを消費するMySQLデータベースサービスを実行している場合、最適な目標は4 - 1 - 0,5(最後)GB = 2,5 GBのRAMを取得することです。 2560MB。
pm.max_childrenは2560Mb / 60Mb = 42 max_childrenになります。
この作業をしてから8ヶ月が経っても502ゲートウェイエラーは発生せず、私たちのコードも確認してみたところ、他の開発者の重要なプロセスコードが多くのリソースを消費しており、まだバックエンドコードに問題があることがわかりました。やっぱりそうです。
この投稿は古くなっていますが、この問題をどのように解決したかを共有したいと思いました。 :D
これは私の参照です。 NGinxでPHP-FPMの正しいサブプロセス数を決定する