我正在尝试优化我的“位置”指令,但找不到确定是否尝试特定位置匹配的好方法。在 location 块内使用echo
在这里没有帮助。
NGINX ngx_http_core_module 文档有些混乱。
要使用正则表达式,您必须使用前缀:
~
对于区分大小写的匹配~*
对于不区分大小写的匹配
比赛如何进行:
=
带有与查询完全匹配的前缀的指令。如果找到,则停止搜索。所有剩余的带有常规字符串的指令。如果此匹配使用了
^~
前缀,则搜索停止。正则表达式,按照它们在配置文件中定义的顺序。
如果 #3 产生匹配,则使用该结果。否则,使用来自#2 的匹配。
此处的数字 2 表示“常规字符串”,但随后表示它可以与^~
前缀一起使用。并不~
意味着正则表达式?如果不是,它如何确定什么是非正则表达式?
具体来说,我想要以下内容:
直接提供任何文字
/assets
。停止搜索。\.php$|/$
通过快速 CGI STOP SEARCH 提供与 RegExp 匹配的任何内容。通过文字直接提供其他所有内容
/
这样,只有/
从资产外部提供的非动态文件的匹配尝试。
我有:
location ^~ /assets {} # search-terminating literal? or regex?
location ~ \.php$|/$ {}
location / {} # is this match always attempted?
从文档来看,实际顺序似乎是 1-3-2,始终运行文字/
匹配。是的,这种优化不会对实际性能产生任何影响,但我只是想澄清一些歧义。