use*_*010 113 nginx nginx-location
如何在NGINX配置中为两个位置使用相同的规则?
我尝试了以下内容
server {
location /first/location/ | /second/location/ {
..
..
}
}
Run Code Online (Sandbox Code Playgroud)
但是nginx reload抛出了这个错误:
nginx: [emerg] invalid number of arguments in "location" directive**
Run Code Online (Sandbox Code Playgroud)
cur*_*ips 182
尝试
location ~ ^/(first/location|second/location)/ {
...
}
Run Code Online (Sandbox Code Playgroud)
〜表示为url使用正则表达式.^表示从第一个字符检查.这将寻找一个/后面的任一个位置,然后是另一个/.
Col*_*ney 76
另一种选择是使用包含的文件在两个前缀位置重复规则.由于前缀位置在配置中与位置无关,因此在稍后添加其他正则表达式位置时使用它们可以节省一些混淆.尽可能避免使用正则表达式位置将有助于您的配置顺利扩展.
server {
location /first/location/ {
include shared.conf;
}
location /second/location/ {
include shared.conf;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个示例shared.conf:
default_type text/plain;
return 200 "http_user_agent: $http_user_agent
remote_addr: $remote_addr
remote_port: $remote_port
scheme: $scheme
nginx_version: $nginx_version
";
Run Code Online (Sandbox Code Playgroud)
Mik*_*ike 31
正则表达式和包含文件都是很好的方法,我经常使用它们.但另一种选择是使用"命名位置",这在许多情况下是一种有用的方法 - 尤其是更复杂的方法.该官方"如果是邪恶的"页面显示实质上包含以下一种好方法做的事情:
error_page 418 = @common_location;
location /first/location/ {
return 418;
}
location /second/location/ {
return 418;
}
location @common_location {
# The common configuration...
}
Run Code Online (Sandbox Code Playgroud)
这些各种方法都有优点和缺点.正则表达式的一大优点是,您可以捕获匹配的部分内容并使用它们来修改响应.当然,通过在原始块中设置变量或使用变量,您通常可以通过其他方法获得类似的结果map.正则表达式方法的缺点是,如果你想匹配各种位置,它会变得难以处理,加上正则表达式的低优先级可能不符合你想要匹配位置的方式 - 更不用说有明显的性能影响在某些情况下来自正则表达式.
包含文件的主要优点(据我所知)是,它对于您可以包含的内容更加灵活 - 例如,它不必是完整的位置块.但它也只是主观地比命名位置有点笨拙.
另请注意,您可以在类似情况下使用相关解决方案:嵌套位置.我们的想法是,您将从一个非常一般的位置开始,对几个可能的匹配应用一些公共配置,然后为要匹配的不同类型的路径分别设置嵌套位置.例如,执行以下操作可能很有用:
location /specialpages/ {
# some config
location /specialpages/static/ {
try_files $uri $uri/ =404;
}
location /specialpages/dynamic/ {
proxy_pass http://127.0.0.1;
}
}
Run Code Online (Sandbox Code Playgroud)
sta*_*ter 12
这是一种简短但有效且经过验证的方法:
location ~ (patternOne|patternTwo){ #rules etc. }
所以一个人可以很容易地使用指向相同位置块/规则的简单管道语法的多个模式。
| 归档时间: |
|
| 查看次数: |
86602 次 |
| 最近记录: |