Nginx常見錯誤代碼總結和分析方法
403錯誤
403是很常見的錯誤代碼,一般就是未授權被禁止訪問的意思。
可能的原因有兩種:
Nginx程序用戶無權限訪問web目錄文件
Nginx需要訪問目錄,但是autoindex選項被關閉
修復方法:
授予Nginx程序用戶權限讀取web目錄文件
設置autoindex目錄為on
location /path/to/website/folder {
...
autoindex on;
... }
413錯誤
在上傳時Nginx返回了413錯誤:“413 Request Entity Too Large”,這一般就是上傳文件大小超過Nginx配置引起。
修復方法:
在Nginx.conf增加client_max_body_size的設置,這個值默認是1M,可以增加到8M以提高文件大小限制;
如果運行的是php,那么還要檢查php.ini,這個大小client_max_body_size要和php.ini中的如下值的最大值一致或者稍大,這樣就不會因為提交數據大小不一致出現的錯誤。
post_max_size = 8M
upload_max_filesize = 2M
502錯誤
Nginx 502 Bad Gateway的含義是請求的PHP-CGI已經執行,但是由于某種原因(一般是讀取資源的問題)沒有執行完畢而導致PHP-CGI進程終止。一般來說Nginx 502 Bad Gateway和php-fpm.conf的設置有關。
修復方法:
1、查看FastCGI進程是否已經啟動
ps -aux | grep php-cgi
2、檢查系統Fastcgi進程運行情況
除了第一種情況,fastcgi進程數不夠用、php執行時間長、或者是php-cgi進程死掉也可能造成Nginx的502錯誤。
運行以下命令判斷是否接近FastCGI進程,如果fastcgi進程數接近配置文件中設置的數值,表明worker進程數設置太少。
netstat -anpo | grep "php-cgi" | wc -l
3、FastCGI執行時間過長
根據實際情況調高以下參數值
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
504錯誤
Nginx 504 Gateway Time-out的含義是所請求的網關沒有請求到,簡單來說就是沒有請求到可以執行的PHP-CGI。
Nginx 504 Gateway Time-out一般與Nginx.conf的設置有關。
頭部太大這種情況可能是由于Nginx默認的fastcgi進程響應的緩沖區太小造成的, 這將導致fastcgi進程被掛起,如果你的fastcgi服務對這個掛起處理的不好,那么最后就極有可能導致504 Gateway Time-out。
默認的fastcgi進程響應的緩沖區是8K,可以調大以下參數:
fastcgi_buffer_size 128k;
fastcgi_buffers 8 128k;
fastcgi_busy_buffers_size 由 128K 改為 256K;
fastcgi_temp_file_write_size 由 128K 改為 256K。
此外,也可能是php-cgi的問題,需要修改php.ini的配置:
將max_children由之前的10改為30,這樣操作是為了保證有充足的php-cgi進程可以被使用。
將request_terminate_timeout由之前的0秒改成60秒,這樣使php-cgi進程處理腳本的超時時間提高到60秒,可以防止進程被掛起以提高利用效率。