轉載至: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錯誤。