LNMPA遇到504 Gateway time-out錯誤的解決方法
Nginx的特點是處理靜態(tài)很給力,Apache的特點是處理動態(tài)很穩(wěn)定,兩者結(jié)合起來便是LNMPA,nginx處理前端,apache處理后端,這樣處理靜態(tài)會很快,處理動態(tài)會很穩(wěn)定。當我以為安裝完成以后便萬事大吉,不料更新網(wǎng)站的時候卻出現(xiàn)504 Gateway time-out;起初還以為這是偶然,多次嘗試后依然出現(xiàn)這樣的情況,因此才決定查找解決方法。
LNMP面對504 Gateway time-out
因為504 Gateway time-out是Nginx的專屬錯誤,因此起初我以為是nginx配置出錯,查找網(wǎng)上的教程,找到相應(yīng)的解決方法,下面簡單說說LNMP面對此種情況的解決方案。Nginx出現(xiàn)這樣的錯誤,是因為對PHP-CGI進程數(shù)限制得太小,面對更新網(wǎng)站這類操作,很可能出現(xiàn)進程不足而超時的情況,因此要修改兩處涉及到處理時間的文件。
首先是nginx.conf文件,這個文件在/nginx/conf/nginx.conf,打開以后,主要修改前面幾個時間,建議修改為120秒以上。至于用什么工具修改,推薦在線命令行編輯;或者用winscp下載下來,用Dreamweaver修改。
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;
fastcgi_buffer_size 128k;
fastcgi_buffers 8 128k;#8 128
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
其次要修改php-fpm.conf文件,這個文件在/php-5.2.17/etc/php-fpm.conf,不同的一鍵安裝包位置有所不同,反正找找php安裝以后文件下面的etc文件夾即可,在線編輯或下載下來用Dreamweaver編輯。
進入文件后搜索”max_children”這是php-cgi進程數(shù),一個進程占20M~30M內(nèi)存,按自己的VPS或云主機內(nèi)存進行計算,好比512M內(nèi)存,推薦設(shè)置為18即可;另外搜索”request_terminate_timeout”,這是超時時間,若php程序要長時間運作,那么設(shè)置時間大一點會比較好,好比設(shè)置為120秒,單位默認是秒,或者寫成120同樣可以。
LNMPA遇到504 Gateway time-out
當我按照Nginx的解決方法設(shè)置,很快設(shè)置成功,不過依然會出現(xiàn)504 Gateway time-out,這時我直接切換為LNMP組合,發(fā)現(xiàn)不再遇到504 Gateway time-out錯誤,這說明設(shè)置已經(jīng)生效;為什么還會出現(xiàn)這樣的錯誤呢?
經(jīng)過大量的資料查找,終于發(fā)現(xiàn)這是Nginx與Apache通信時間設(shè)置問題,當用戶發(fā)出php腳本執(zhí)行請求,nginx不會執(zhí)行php,會把這個問題留給后臺的apache,nginx會等待一段時間,apache可以在等待時間內(nèi)處理php腳本請求,若未處理完,nginx便已未收到數(shù)據(jù)請求而返回504 Gateway time-out錯誤,實際情況是apache依然會在后臺處理完php腳本,只是前臺返回錯誤。
解決方法是修改nginx與apche通信時間,具體是配置proxy.conf,這個文件在/nginx/conf/下面,名字可能會有變化,好比有的安裝包是laproxy.conf,反正是**proxy.conf文件。
proxy_connect_timeout 60;
proxy_send_timeout 600;
proxy_read_timeout 90;
proxy_buffer_size 128k;
proxy_buffers 8 128k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 100m;
第一項是連接時間,前端連接后端時間,60s以內(nèi)即可,第二個是發(fā)送時間,允許后端返回數(shù)據(jù)的時間,90s以內(nèi)即可,第三個時間是讀寫時間,這是前端等待后端處理時間,這是導致504 Gateway time-out的根本原因,出現(xiàn)這個錯誤,說明這個值太小,推薦不小于600s,服務(wù)器越差,那么設(shè)置得更長,保證處理完畢。
當我把這個文件設(shè)置好,重啟nginx和apache,再次更新文章,已經(jīng)不會遇到這類錯誤,說明出錯原因不是nginx,而是前段和后端的通信時間太短。另外,nginx還會有502錯誤,實際上原理是差不多的,同樣設(shè)置上面這部分文件,LNMPA組合依然是設(shè)置前后端的通信時間。
關(guān)鍵詞:LNMPA
閱讀本文后您有什么感想? 已有 人給出評價!
- 0
- 0
- 0
- 0
- 0
- 0