我今天来找你,对我的 NGINX 反向代理有一个超级奇怪的说法。
我用它作为 tomcat 服务器的反向代理,并像这样设置主机配置:
server {
listen 80;
server_name hostname.domaine.tld;
access_log /var/log/nginx/hostname.access.log;
error_log /var/log/nginx/hostname.errors.log;
include errors.conf;
include proxy.conf;
location = / {
deny all;
}
location = /manager/(?<uri>\w+)$ {
deny all;
}
location ~ ^/(?<uri>\w+)$ {
proxy_pass http://recette/$uri;
}
}
长话短说,我的目标是允许访问此主机上的资源,如下所示:
host.domaine.tld/ressourcename/(.*)
但我也想拒绝对以下 URL 的任何访问:
主机.domaine.tld/
host.domaine.tld/manager/
host.domaine.tld/manager/(.*)
在这里我的配置似乎不起作用,据我了解,这是因为第三个位置始终为真,即使您在配置文件中设置了第二个位置,在这种情况下,您将始终被授予访问管理器的权限虚拟主机,即使它被明确拒绝。
所以,我想就这个话题向你请教一些帮助,因为我认为我的正则表达式不正确。
好的,终于明白了!
我搞砸了我的正则表达式:'(
这是最终的配置文件,它可以按预期完美运行:D
确实有两个问题,第一个是需要完美匹配的“=”符号。第二个是添加的 (w+),它与 (?) 指令提供的已经存在的 catch all regex 冲突。
所以,感谢观众,打扰了^^