1执赡、Nginx 常見問題
-
1首懈、相同server_name多個(gè)虛擬主機(jī)優(yōu)先級(jí)訪問
- 根據(jù)文件名順序優(yōu)先讀取。使用ip訪問的時(shí)候,也是根據(jù)文件名順序優(yōu)先讀取。
-
2、location匹配優(yōu)先級(jí)
-
=
進(jìn)行普通字符精確匹配揭鳞,也就是完全匹配。 -
^ ~
表示普通字符匹配扶镀,使用前綴匹配鹦马。 -
~ \~*
表示正在執(zhí)行一個(gè)正則匹配(); -
~*
:為不區(qū)分大小寫匹配(可用正則表達(dá)式) -
~
:為區(qū)分大小寫匹配(可用正則表達(dá)式)
root目錄下邊添加
code1
,code2
,code3
三個(gè)文件夾场仲。每個(gè)文件夾中存放一個(gè)html文件,并做不同的標(biāo)記燕差。此時(shí)重啟Nginx,然后訪問https://www.heartmusicbeat.com/code1, 此時(shí)將會(huì)返回 code1所在的文件的html文件。
然后注釋掉第一個(gè)精確匹配的location,再訪問 https://www.heartmusicbeat.com/code1 蹋辅,此時(shí)將返回code2所在的文件的html文件。由此可見,即使正則匹配到了支竹,但是依舊會(huì)向下執(zhí)行,匹配優(yōu)先級(jí)更高的扯罐。
然后注釋掉第三個(gè)匹配的location再訪問 https://www.heartmusicbeat.com/code1示辈,此時(shí)將會(huì)返回 code3所在的文件的html文件。
-
-
3、try_files使用
-
try_files的作用
- 按順序檢查文件是否存在请敦。
-
4、alias和root的使用區(qū)別
- 使用 alias 時(shí)唬血,目錄名后面一定要加” /”
- alias 可以指定任何名稱
- alias 在使用正則匹配時(shí)芦疏,必須捕捉要匹配的內(nèi)容并在指定的內(nèi)容處使用薪捍。
- alias 只能位于 location 塊中溉潭。
5、如何傳遞用戶的真實(shí)IP地址
-
場(chǎng)景如下:
假設(shè)用戶經(jīng)過多層代理訪問后端服務(wù)腰埂,其實(shí)我們是不知道用戶真實(shí)的IP地址的驴一。
那么我們需要和第一級(jí)代理約定,需要在頭信息中加上對(duì)應(yīng)的IP地址信息孝情,那么后續(xù)的傳遞都將含有用戶真實(shí)的IP。
6低矮、Nginx 常見的錯(cuò)誤碼
-
403錯(cuò)誤
403是很常見的錯(cuò)誤代碼,一般就是未授權(quán)被禁止訪問的意思叮贩。
-
可能的原因有兩種:
- Nginx程序用戶無(wú)權(quán)限訪問web目錄文件
- Nginx需要訪問目錄,但是autoindex選項(xiàng)被關(guān)閉
-
修復(fù)方法:
- 授予Nginx程序用戶權(quán)限讀取web目錄文件
- 設(shè)置autoindex目錄為on
-
413錯(cuò)誤
在上傳時(shí)Nginx返回了413錯(cuò)誤:“413 Request Entity Too Large”益老,這一般就是上傳文件大小超過Nginx配置引起彪蓬。
-
修復(fù)方法:
- 在Nginx.conf增加client_max_body_size的設(shè)置,這個(gè)值默認(rèn)是1M捺萌,可以增加到8M以提高文件大小限制档冬;
- 如果運(yùn)行的是php,那么還要檢查php.ini桃纯,這個(gè)大小client_max_body_size要和php.ini中的如下值的最大值一致或者稍大酷誓,這樣就不會(huì)因?yàn)樘峤粩?shù)據(jù)大小不一致出現(xiàn)的錯(cuò)誤。
-
502錯(cuò)誤
- Nginx 502 Bad Gateway的含義是請(qǐng)求的PHP-CGI已經(jīng)執(zhí)行态坦,但是由于某種原因(一般是讀取資源的問題)沒有執(zhí)行完畢而導(dǎo)致PHP-CGI進(jìn)程終止盐数。一般來說Nginx 502 Bad Gateway和php-fpm.conf的設(shè)置有關(guān)。
- 修復(fù)方法:
- 1伞梯、查看FastCGI進(jìn)程是否已經(jīng)啟動(dòng)
ps -aux | grep php-cgi
- 2玫氢、檢查系統(tǒng)Fastcgi進(jìn)程運(yùn)行情況
除了第一種情況,fastcgi進(jìn)程數(shù)不夠用谜诫、php執(zhí)行時(shí)間長(zhǎng)漾峡、或者是php-cgi進(jìn)程死掉也可能造成Nginx的502錯(cuò)誤。
- 運(yùn)行以下命令判斷是否接近FastCGI進(jìn)程喻旷,如果fastcgi進(jìn)程數(shù)接近配置文件中設(shè)置的數(shù)值生逸,表明worker進(jìn)程數(shù)設(shè)置太少。
netstat -anpo | grep "php-cgi" | wc -l
-
3、FastCGI執(zhí)行時(shí)間過長(zhǎng)
- 根據(jù)實(shí)際情況調(diào)高以下參數(shù)值
504錯(cuò)誤
Nginx 504 Gateway Time-out的含義是所請(qǐng)求的網(wǎng)關(guān)沒有請(qǐng)求到槽袄,簡(jiǎn)單來說就是沒有請(qǐng)求到可以執(zhí)行的PHP-CGI伟阔。
Nginx 504 Gateway Time-out一般與Nginx.conf的設(shè)置有關(guān)。
頭部太大這種情況可能是由于Nginx默認(rèn)的fastcgi進(jìn)程響應(yīng)的緩沖區(qū)太小造成的掰伸, 這將導(dǎo)致fastcgi進(jìn)程被掛起,如果你的fastcgi服務(wù)對(duì)這個(gè)掛起處理的不好怀估,那么最后就極有可能導(dǎo)致504 Gateway Time-out狮鸭。
默認(rèn)的fastcgi進(jìn)程響應(yīng)的緩沖區(qū)是8K,可以調(diào)大以下參數(shù):
此外多搀,也可能是php-cgi的問題歧蕉,需要修改php.ini的配置:
將max_children由之前的10改為30,這樣操作是為了保證有充足的php-cgi進(jìn)程可以被使用康铭。
將request_terminate_timeout由之前的0秒改成60秒惯退,這樣使php-cgi進(jìn)程處理腳本的超時(shí)時(shí)間提高到60秒,可以防止進(jìn)程被掛起以提高利用效率从藤。
nginx “403 Forbidden” 錯(cuò)誤的原因及解決辦法
user root owner;
微信掃碼關(guān)注java架構(gòu)催跪,獲取Java面試題和架構(gòu)師相關(guān)題目和視頻。