先貼出我的server配置:
server {
listen 80;
server_name xxx;
# 1
location = /favicon.ico {
root /home/www-data/static;
rewrite (.*) /img/designs/admin-favicon.ico;
}
#2
location = /robots.txt {
root /home/www-data/static;
rewrite (.*) /admin-robots.txt;
}
# 3
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://127.0.0.1:22222;
}
}
官方給出的location搜索路徑優(yōu)先級(jí)和算法描述如下:
To find location matching a given request, nginx first checks
locations defined using the prefix strings (prefix locations). Among
them, the location with the longest matching prefix is selected and
remembered. Then regular expressions are checked, in the order of
their appearance in the configuration file. The search of regular
expressions terminates on the first match, and the corresponding
configuration is used. If no match with a regular expression is found
then the configuration of the prefix location remembered earlier is
used.
按照我的理解,Nginx搜索的時(shí)候算法應(yīng)該是這樣的:
- 按照請(qǐng)求前綴搜索location最長(zhǎng)普通前綴匹配(如果有=修飾符,則直接匹配該location,如果有^~修飾符,則直接使用該location),記住最長(zhǎng)匹配location。
- 繼續(xù)按照配置順序搜索正則匹配,如果有,則直接匹配第一個(gè)匹配到的location,否則使用普通最長(zhǎng)location
也就說(shuō),按照我的配置,瀏覽器請(qǐng)求/favicon.ico的時(shí)候,應(yīng)該是直接精準(zhǔn)匹配到
1 才對(duì)啊,可是每次都匹配到 3。
這里請(qǐng)教一下各位,我對(duì)Nginx location的理解有沒(méi)有偏差?然后為什么我的配置會(huì)是這樣的結(jié)果?
人生最曼妙的風(fēng)景,竟是內(nèi)心的淡定與從容!
按照樓主的方法配置了一下,我這里是可以進(jìn)到# 1的。
我覺(jué)得可能是CDN緩存的問(wèn)題。樓主試試別的文件rewrite或者在沒(méi)有CDN的環(huán)境下試試。