lee*_*iya 17 nginx url-rewriting nginx-location
我正在尝试优化我的"位置"指令,并且找不到确定是否尝试特定位置匹配的好方法.使用echo位置块内不帮助这里.
NGINX ngx_http_core_module文档有点令人困惑.
要使用正则表达式,必须使用前缀:
~ 区分大小写的匹配
~* 对于不区分大小写的匹配
如何进行比赛:
具有=与查询完全匹配的前缀的指令.如果找到,搜索停止.
所有剩余的指令与传统的字符串.如果此匹配使用^~前缀,则搜索停止.
正则表达式,按照在配置文件中定义的顺序.
如果#3产生匹配,则使用该结果.否则,使用#2的匹配.
这里的数字2表示"常规字符串",但后来说它可以与^~前缀一起使用.并不~意味着RegExp?如果没有,它如何确定什么不是RegExp?
具体来说,我想要以下内容:
/assets直接提供任何文字.停止搜索.
\.php$|/$通过快速CGI STOP SEARCH提供与RegExp匹配的任何内容.
通过文字直接提供其他所有内容 /
这样,只有/匹配尝试从资源外部提供的非动态文件.
我有:
location ^~ /assets {} # search-terminating literal? or regex?
location ~ \.php$|/$ {}
location / {} # is this match always attempted?
Run Code Online (Sandbox Code Playgroud)
从文档中,看起来实际的顺序是1-3-2,始终运行文字/匹配.是的,这种优化不会对实际性能产生任何影响,但我只是想澄清一些含糊之处.
来自维基:
location = / {
# matches the query / only.
[ configuration A ]
}
location / {
# matches any query, since all queries begin with /, but regular
# expressions and any longer conventional blocks will be
# matched first.
[ configuration B ]
}
Run Code Online (Sandbox Code Playgroud)
所以,这将首先匹配:
location ~ \.php$ {}
即使资产是由服务提供的 location / {}
在php块中你还希望在传递给fastcgi之前防止恶意上传:
if ($uri ~* "^/uploads/") {
return 404;
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,nginx的工作方式与您预期的有所不同.
| 归档时间: |
|
| 查看次数: |
18852 次 |
| 最近记录: |