An error occurred.
Sorry, the page you are looking for is currently unavailable.
Please try again later.
If you are the system administrator of this resource then you should check theerror log for details.
Faithfully yours, nginx.
如上,剛老徐正打算上簡(jiǎn)書平臺(tái),寫文章,出現(xiàn)如上錯(cuò)誤,應(yīng)該持續(xù)了幾分鐘~不知道有多少用戶有感知,平臺(tái)響應(yīng)還不錯(cuò),幾分鐘后已恢復(fù)正?!?/p>
一般nginx的此類報(bào)錯(cuò),原因如下(當(dāng)然,老徐對(duì)nginx了解不深,如下都是一些可能原因)
出現(xiàn)問(wèn)題,首先是去分析nginx的日志,得到一些線索~
可能的常見(jiàn)原因:
/ 1 /
很明顯這是一個(gè)nginx的錯(cuò)誤,查看nginx.conf的文件過(guò)程中分析可能是以下的問(wèn)題,在nginx.xml中有如下配置:
標(biāo)紅的部分是很大的嫌疑,恰好應(yīng)用中在提交數(shù)據(jù)的一瞬間和服務(wù)器有多次交互,這些交互都要過(guò)nginx。再加上用戶IP來(lái)做key,假如多個(gè)用戶訪問(wèn)在網(wǎng)上的最后一跳是同一個(gè)路由器,很顯然會(huì)被服務(wù)器當(dāng)成是一臺(tái)電腦,從而出現(xiàn)判斷錯(cuò)誤。那么又一個(gè)新問(wèn)題來(lái)了,出現(xiàn)503錯(cuò)誤后為啥返回的是那個(gè)錯(cuò)誤頁(yè)面呢?
帶著這個(gè)問(wèn)題在nginx.conf中又發(fā)現(xiàn)了一段配置,如下圖:
這個(gè)配置的意思是當(dāng)出現(xiàn)500、502、503、504的錯(cuò)誤時(shí)返回50x.html頁(yè)面,這個(gè)頁(yè)面在nginx安裝目錄的html文件夾下,內(nèi)容如下:
這個(gè)頁(yè)面經(jīng)過(guò)瀏覽器解析就是開(kāi)頭第一幅圖的樣子。
分析到這里,就大概估計(jì)出原因了,把之前的rate值該大一點(diǎn)即可。那么到底改多大?這個(gè)要根據(jù)不同的業(yè)務(wù)而定,甚至去掉這個(gè)配置,所以這個(gè)是個(gè)經(jīng)驗(yàn)值,通過(guò)多次試驗(yàn)可以得到一個(gè)相對(duì)于應(yīng)用合理的值,這里就不說(shuō)了。
實(shí)際nginx出現(xiàn)這個(gè)錯(cuò)誤原因應(yīng)該有很多,這里提供一種可能原因,以供網(wǎng)友參考。
/ 2 /
日志記錄中HTTP狀態(tài)碼出現(xiàn)499錯(cuò)誤有多種情況,我遇到的一種情況是nginx反代到一個(gè)永遠(yuǎn)打不開(kāi)的后端,就這樣了,日志狀態(tài)記錄是499、發(fā)送字節(jié)數(shù)是0。
老是有用戶反映網(wǎng)站系統(tǒng)時(shí)好時(shí)壞,因?yàn)榫€上的產(chǎn)品很長(zhǎng)時(shí)間沒(méi)有修改,所以前端程序的問(wèn)題基本上可以排除,于是就想著是Get方式調(diào)用的接口不穩(wěn)定,問(wèn)了相關(guān)人員,說(shuō)沒(méi)有問(wèn)題,為了拿到確切證據(jù),于是我問(wèn)相關(guān)人員要了nginx服務(wù)器的日志文件(awstats日志),分析后發(fā)現(xiàn)日志中很多錯(cuò)誤碼為499的錯(cuò)誤,約占整個(gè)日志文件的1%,而它只占全部報(bào)錯(cuò)的70%左右(全部報(bào)錯(cuò)見(jiàn)下圖),那么所有報(bào)錯(cuò)加起來(lái)就要超過(guò)1%了,這個(gè)量還是特別大的。
499錯(cuò)誤是什么?讓我們看看NGINX的源碼中的定義:
ngx_string(ngx_http_error_495_page), /* 495, https certificate error */
ngx_string(ngx_http_error_496_page), /* 496, https no certificate */
ngx_string(ngx_http_error_497_page), /* 497, http to https */
ngx_string(ngx_http_error_404_page), /* 498, canceled */
ngx_null_string,??????????????????? /* 499, client has closed connection */
可以看到,499對(duì)應(yīng)的是 “client has closed connection”。這很有可能是因?yàn)榉?wù)器端處理的時(shí)間過(guò)長(zhǎng),客戶端“不耐煩”了。
Nginx 499錯(cuò)誤的原因及解決方法
打開(kāi)Nginx的access.log發(fā)現(xiàn)在最后一次的提交是出現(xiàn)了HTTP1.1 499 0 -這樣的錯(cuò)誤,在百度搜索nginx 499錯(cuò)誤,結(jié)果都是說(shuō)客戶端主動(dòng)斷開(kāi)了連接。
但經(jīng)過(guò)我的測(cè)試這顯然不是客戶端的問(wèn)題,因?yàn)槭褂枚丝?IP直接訪問(wèn)后端服務(wù)器不存在此問(wèn)題,后來(lái)測(cè)試nginx發(fā)現(xiàn)如果兩次提交post過(guò)快就會(huì)出現(xiàn)499的情況,看來(lái)是nginx認(rèn)為是不安全的連接,主動(dòng)拒絕了客戶端的連接.
但搜索相關(guān)問(wèn)題一直找不到解決方法,最后終于在google上搜索到一英文論壇上有關(guān)于此錯(cuò)誤的解決方法:
proxy_ignore_client_abort on;
Don’t know if this is safe.
就是說(shuō)要配置參數(shù) proxy_ignore_client_abort on;
表示代理服務(wù)端不要主要主動(dòng)關(guān)閉客戶端連接。
以此配置重啟nginx,問(wèn)題果然得到解決。只是安全方面稍有欠缺,但比總是出現(xiàn)找不到服務(wù)器好多了。
還有一種原因是 我后來(lái)測(cè)試發(fā)現(xiàn) 確實(shí)是客戶端關(guān)閉了連接,或者說(shuō)連接超時(shí) ,無(wú)論你設(shè)置多少超時(shí)時(shí)間多沒(méi)用 原來(lái)是php進(jìn)程不夠用了 改善一下php進(jìn)程數(shù) 問(wèn)題解決
/ 3 /
今天網(wǎng)站突然出現(xiàn)如下錯(cuò)誤:
The page you are looking for is temporarily unavailable.Please try again later.
很奇怪,我對(duì)服務(wù)器端的技術(shù)不是很熟悉,于是查詢了下google,在https://wiki.archlinux.org/index.php/Nginx
上面的解決方法:
Error: The page you are looking for is temporarily unavailable. Please try again later.
This is because the FastCGI server has not been started.
如何解決呢?
剛開(kāi)始我懷疑是不是nginx掛了,我首先通過(guò)ps aux | grep nginx,結(jié)果出現(xiàn):
root ? ? ?3769 ?0.0 ?0.0 ? 5760 ? 692 ? ? ? ? ?Ss ? Apr21 ? 0:00 nginx: master process /usr/local/nginx/sbin/nginx
www ? ? ? 3770 ?0.0 ?0.1 ?18680 14252 ? ? ? ? ?S ? ?Apr21 ? 0:03 nginx: worker process
www ? ? ? 3771 ?0.0 ?0.1 ?18680 14252 ? ? ? ? ?S ? ?Apr21 ? 0:03 nginx: worker process
www ? ? ? 3772 ?0.0 ?0.1 ?18712 14276 ? ? ? ? ?S ? ?Apr21 ? 0:03 nginx: worker process
www ? ? ? 3774 ?0.0 ?0.1 ?18680 14248 ? ? ? ? ?S ? ?Apr21 ? 0:03 nginx: worker process
www ? ? ? 3776 ?0.0 ?0.1 ?18712 14240 ? ? ? ? ?S ? ?Apr21 ? 0:03 nginx: worker process
www ? ? ? 3777 ?0.0 ?0.1 ?18680 14252 ? ? ? ? ?S ? ?Apr21 ? 0:03 nginx: worker process
www ? ? ? 3778 ?0.0 ?0.1 ?18680 14232 ? ? ? ? ?S ? ?Apr21 ? 0:02 nginx: worker process
root ? ? 24068 ?0.0 ?0.0 ? 5196 ? 756 pts/1 ? ?S+ ? 14:33 ? 0:00 grep nginx
可見(jiàn)nginx是正常的,本來(lái)打算重啟nginx的:
/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf的,
突然覺(jué)得有沒(méi)有其他方法,有同事提示先在一個(gè)目錄下運(yùn)行下test.html和test.php,結(jié)果html可以運(yùn)行,php無(wú)法運(yùn)行。
證實(shí)是php沒(méi)有啟動(dòng),我剛才也檢測(cè)過(guò)php的進(jìn)程,的確是沒(méi)有php進(jìn)程,這臺(tái)服務(wù)器我不熟悉,同事幫忙查看了下
cd /etc/init.d,就是web管理員經(jīng)??吹牡胤?,是隨著系統(tǒng)自動(dòng)啟動(dòng)的服務(wù),程序等。可以看看:
http://blog.wgzhao.com/2008/12/27/talk-about-rc-local.html的《 說(shuō)說(shuō)?/etc/rc.d/rc.local》
找到:
/usr/local/php/sbin/php-fpm start,首先什么是php-fpm呢?
就是FastCGI Process Manager,是一種可選的PHP FastGCI執(zhí)行模式,有一點(diǎn)很有特點(diǎn)的應(yīng)用,尤其是一個(gè)繁忙的網(wǎng)站中:
(1)可適應(yīng)的進(jìn)行再生(NEW!)
(2)基本的統(tǒng)計(jì)功能(Apache's mod_status)
(3)高級(jí)進(jìn)程管理功能,能夠優(yōu)雅的停止/開(kāi)始
(4)能夠使用不同的工作用戶和不同的php.ini
(5)輸入,輸出日志記錄...
開(kāi)啟后,一切恢復(fù)正常!自己的服務(wù)器端技術(shù)還是有很多地方使用的不夠。需要多學(xué)習(xí)使用!
總結(jié):
1、試檢查一下nginx.conf的設(shè)置,是不是有l(wèi)imit的設(shè)置,比如limit_zone、limit_conn,這些參數(shù)也是有影響的。
2、檢查一下防火墻,是不是有相關(guān)的設(shè)置限制。
3、檢查一下nginx.conf的設(shè)置,看看有沒(méi)有valid_referers none blocked的防鏈設(shè)置。
4、看下訪問(wèn)靜態(tài)文件是否正常,錯(cuò)誤排除~
OK,如上只是一些猜測(cè)~
具體原因,具體分析~
越來(lái)越多的系統(tǒng),采用nginx,大家有必要了解些nginx的知識(shí)~