Nginx 50X錯誤總結


轉載至:https://blog.csdn.net/cheng1804/article/details/83015579

500(Internal Server Error服務器內部錯誤) 服務器遇到錯誤,無法完成請求
501(尚未實施) 服務器不具備完成請求的功能。例如,當服務器無法識別請求方法時,服務器可能會返回此代碼
502(Bad Gateway錯誤網關) 服務器作為網關或代理,從上游服務器收到了無效的響應
503(服務不可用) 目前無法使用服務器(由於超載或進行停機維護)。通常,這只是一種暫時的狀態
504(Gateway Time-out網關超時) 服務器作為網關或代理,未及時從上游服務器接收請求
505(HTTP 版本不受支持) 服務器不支持請求中所使用的 HTTP 協議版本

 

 

 

 

 

 

 

 

1、500(Internal Server Error)錯誤

500錯誤指的是服務器內部錯誤,也就是服務器遇到意外情況,而無法履行請求。

一般有以下幾種情況:

1)web腳本錯誤,如php語法錯誤,lua語法錯誤等。

2)問量大的時候,由於系統資源限制,而不能打開過多的文件

分析思路:

1)查看nginx error log ,查看php error log

2)如果是too many open files,修改nginx的worker_rlimit_nofile參數,使用ulimit查看系統打開文件限制,修改/etc/security/limits.conf

3)如果是腳本的問題,則需要修復腳本錯誤,並優化代碼

4)各種優化都做好,還是出現too many open files,那就要考慮做負載均衡,把流量分散到不同服務器上去了。

錯誤原因總結:

1)硬盤空間滿了

使用 df -k 查看硬盤空間是否滿了。清理硬盤空間就可以解決500錯誤。nginx如果開啟了access log,在不需要的情況下,最好關閉access log,access log會占用大量硬盤空間。

2)nginx配置文件錯誤

這里不是指語法錯誤,nginx如果配置文件有語法錯誤,啟動的時候就會提示。當配置rewrite的時候,有些規則處理不當會出現500錯誤,請仔細檢查自己的rewrite規則。如果配置文件里有些變量設置不當,也會出現500錯誤,比如引用了一個沒有值的變量。

3)如果上面的問題都不存在可能是模擬的並發數太多了,需要調整一下nginx.conf的並發設置數

解決方法:

1)打開/etc/security/limits.conf文件,加上兩句

soft nofile 65535
hard nofile 65535

2)打開/etc/nginx/nginx.conf

worker_rlimit_nofile 65535;

3)重啟nginx,重新載入配置

kill -9 `ps -ef | grep php | grep -v grep | awk '{print $2}'`
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 100 -u www-data -f /usr/bin/php-cgi
killall -HUP nginx

重啟后再看nginx的錯誤日志,也沒有發現500報錯的情況了。

4)有可能是數據庫問題我的在nginx日志php日志都沒有發現什么問題, 最后發現數據庫訪問不了,修正后問題解決。

2、502(Gateway Time-out)錯誤

作為網關或者代理工作的服務器嘗試執行請求時,從上游服務器接收到無效的響應。

原因分析:

將請求提交給網關如php-fpm執行,但是由於某些原因沒有執行完畢導致php-fpm進程終止執行。說到此,這個問題就很明了了,與網關服務如php-fpm的配置有關了。

分析思路:

php-fpm.conf配置文件中有兩個參數就需要你考慮到,分別是max_children和request_terminate_timeout。

1)max_children最大子進程數,在高並發請求下,達到php-fpm最大響應數,后續的請求就會出現502錯誤的。可以通過netstat命令來查看當前連接數。

2)request_terminate_timeout設置單個請求的超時終止時間。還應該注意到php.ini中的max_execution_time參數。當請求終止時,也會出現502錯誤的。

3)當積累了大量的php請求,你重啟php-fpm釋放資源,但一兩分鍾不到,502又再次呈現,這是什么原因導致的呢? 這時還應該考慮到數據庫,查看下數據庫進程是否有大量的locked進程,數據庫死鎖導致超時,前端終止了繼續請求,但是SQL語句還在等待釋放鎖,這時就要重啟數據庫服務了或kill掉死鎖SQL進程了。

3、504(Gateway Time-out)錯誤

504錯誤一般是與nginx.conf配置有關了

主要與以下幾個參數有關:

fastcgi_connect_timeout

fastcgi_send_timeout

fastcgi_read_timeout

fastcgi_buffer_size

fastcgi_buffers

fastcgi_busy_buffers_size

fastcgi_temp_file_write_size

fastcgi_intercept_errors

特別是前三個超時時間。如果fastcgi緩沖區太小會導致fastcgi進程被掛起從而演變為504錯誤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM