My understanding to Nginx so far

Location directive 没有fallback 机制。因为一个 request 只能匹配一个 location,不是常规 location 的话,就是正则表达式 location。假如有两个 location blocks,
location / {
index index.php;
}

location /abc {
client_max_body_size 32m;
}

请别指望 index index.php  会在location /abc 生效。因为这是两个 location,只能有一个生效,另一个被忽略。

正则表达式 location 优先于常规 location 匹配(除非常规 location 使用 ^~ 或 =);常规 location 之间最长匹配优先;正则表达式 location 之间位置在前优先。

Nginx wiki 文档里关于 location 用到的 “searching stops” 这个词很不恰当,挺误导初学者的思维,让人误以为会有两个或两个以上 location同时生效。

正则表达式 location 以 ~ 或 ~* 开头,其他的都是常规 location (以 ^~ 开头的貌似正则表达式 location,却是常规 location)。

Root directive 和 alias directive 用处类似,只是 alias 不改变 document root。但是,它们对文件的定位方式明显不同。例:
如配置文件使用 root –
server {
server_name _;
root /default/path;

location /abc {
root /another/path;
}
}
Request to /abc/filename.jpg 将对应 /anther/path/abc/filename.jpg。
如配置文件使用 alias –
server {
server_name _;
root /default/path;

location /abc {
alias /another/path;
}
}
Request to /abc/filename.jpg 将对应 /anther/path/filename.jpg。

以上是我用我的语言的去理解 Nginx 的语法。

Leave a Reply

Your email address will not be published. Required fields are marked *