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