執行PHP操做大文件insert mysql數據庫時,出現這個錯誤提示php
The page you are looking for is temporarily unavailable.
Please try again later.mysql
set_time_limit(0)不限超時已經設置,而且PHP.INI中的錯誤提示已經打開,但仍是出現上面的提示。nginx
因而,查看nginx的錯誤日誌,發現這個錯誤web
2014/02/11 15:51:09 [error] 6085#0: *403 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.34, server: admin38.xx.com, request: "GET /osstest/fread.php?id=98 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "admin38.xx.com:1010"sql
好象是超時了。。數據庫
因而 修改nginx的配置文件conf後端
報這個錯誤以後,整個服務器就不響應了,可是nginx後面的webpy程序沒有任何錯誤,後端的數據庫也很正常,從網上查了不少資料,都是說要修改proxy_read_timeout,proxy_send_timeout和proxy_buffer幾個相關設置的值。服務器
以下配置,要放在server配置節以內php-fpm
large_client_header_buffers 4 16k; client_max_body_size 30m; client_body_buffer_size 128k; #proxy_connect_timeout 300; #proxy_read_timeout 300; #proxy_send_timeout 300; #proxy_buffer_size 64k; #proxy_buffers 4 32k; #proxy_busy_buffers_size 64k; #proxy_temp_file_write_size 64k; fastcgi_connect_timeout 300; fastcgi_read_timeout 300; fastcgi_send_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 32k; fastcgi_busy_buffers_size 64k; fastcgi_temp_file_write_size 64k;
你能夠看到上面是proxy_和fastcgi_兩種配置,就是說若是你的nginx後面是proxy,就設置proxy相關的配置,若是是fastcgi就設置fastcgi相關的配置。post
這裏能夠設置最大,如100000,
這裏規定了PHP-CGI的鏈接、發送和讀取的時間,300秒足夠用了,所以個人服務器不多出現504 Gateway Time-out這個錯誤。最關鍵的是php-fpm.conf的設置,這個會直接致使502 Bad Gateway和504 Gateway Time-out。
下面咱們來仔細分析一下php-fpm.conf幾個重要的參數:
php-fpm.conf有兩個相當重要的參數,一個是」max_children」,另外一個是」request_terminate_timeout」
個人兩個設置的值一個是」40″,一個是」900″,可是這個值不是通用的,而是須要本身計算的。
計算的方式以下:
若是你的服務器性能足夠好,且寬帶資源足夠充足,PHP腳本沒有系循環或BUG的話你能夠直接 將」request_terminate_timeout」設置成0s。0s的含義是讓PHP-CGI一直執行下去而沒有時間限制。而若是你作不到這一 點,也就是說你的PHP-CGI可能出現某個BUG,或者你的寬帶不夠充足或者其餘的緣由致使你的PHP-CGI可以假死那麼就建議你 給」request_terminate_timeout」賦一個值,這個值能夠根據你服務器的性能進行設定。通常來講性能越好你能夠設置越高,20分鐘 -30分鐘均可以。因爲個人服務器PHP腳本須要長時間運行,有的可能會超過10分鐘所以我設置了900秒,這樣不會致使PHP-CGI死掉而出現502 Bad gateway這個錯誤。
而」max_children」這個值又是怎麼計算出來的呢?這個值原則上是越大越好,php-cgi的進程多了就會處理的很快,排隊的請求就 會不多。設置」max_children」也須要根據服務器的性能進行設定,通常來講一臺服務器正常狀況下每個php-cgi所耗費的內存在20M左 右,所以個人」max_children」我設置成40個,20M*40=800M也就是說在峯值的時候全部PHP-CGI所耗內存在800M之內,低於 個人有效內存1Gb。而若是個人」max_children」設置的較小,好比5-10個,那麼php-cgi就會「很累」,處理速度也很慢,等待的時間 也較長。若是長時間沒有獲得處理的請求就會出現504 Gateway Time-out這個錯誤,而正在處理的很累的那幾個php-cgi若是遇到了問題就會出現502 Bad gateway這個錯誤。
fastcgi_read_timeout 300s;
爲防止萬一,我在nginx.conf默認配置文件中也修改了最大時間。
作了上面2個設置後,重啓一下
/usr/local/nginx/sbin/nginx -s stop //關閉服務器
/usr/local/nginx/sbin/nginx 開啓服務器
php-fpm重啓
killall php-fpm
再執行(usr/local/php是php的安裝目錄)
/usr/local/php/sbin/php-fpm
NGINX反代理超時報錯,解決方法:server { listen 80; server_name *.xywy.com ; large_client_header_buffers 4 16k; client_max_body_size 300m; client_body_buffer_size 128k; proxy_connect_timeout 600; proxy_read_timeout 600; proxy_send_timeout 600; proxy_buffer_size 64k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; ........................ }