504のエラーが出た場合
client—①—nginx—②—php5-fpm—③—mysql
504 gateway time-out
上記の構成として、この場合、②においてnginx—>php5-fpmでphp5の処理が遅くnginxが切断してしまった。
という事なので、nginxのfastcgiのtimeout値を伸ばしてあげる必要があります。
例えば、以下のようなファイルを作成して、nginxを再起動します。
% sudo vi /etc/nginx/conf.d/fastcgi.conf --- fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 300; < --- ココ fastcgi_read_timeout 300; <--- ココ fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; --- % sudo /etc/init.d/nginx restart
※reloadでも良いかもしれません
104のエラーが出た場合
client—①—nginx—②—php5-fpm—③—mysql
recv() failed (104: Connection reset by peer) while reading response header from upstream, client:
において、php5が処理時間がかかってしまって、nginx—>php5-fpmにクエリは投げられたけど、nginx< —php5-fpmに返す際に、php5-fpmがコネクションを切っちゃったケース。
% sudo vi /etc/php5/fpm/pool.d/www.conf --- ;pm.process_idle_timeout = 10s; ↓ pm.process_idle_timeout = 30s; ---
% sudo vi /etc/php5/php.ini --- max_execution_time = 30 ← 60などに増やす --- % sudo /etc/init.d/php5-fpm restart
それでも改善しない場合は、phpの動作を確認します。
% sudo vi /etc/php5/fpm/pool.d/www.conf --- ;pm.status_path = /status ↓ pm.status_path = /status ;php_admin_value[error_log] = /var/log/fpm-php.www.log ↓ php_admin_value[error_log] = /var/log/fpm-php.www.log --- % sudo /etc/init.d/php5-fpm restart
php5-fpmのプロセスが足りない場合
→ /etc/php5/fpm/pool.d/www.conf : pm.max_children = 5 や、pm.max_spare_servers = 3を増やす
※ pm = dynamicを確認
mysqlの接続数も増やす 5×3=15だったのを増やした分だけ接続できるように!
s sudo vi /etc/mysql/my.cnf --- max_connections=128 < --- pm.max_children x pm.max_spare_servers以上にする ---
ここにイイカンジでまとまってました。