首先,我必须承认我对 NGINX 完全是菜鸟。我只用它做过一些非常基础的工作。
现在的情况是这样的。我们在 DMZ 中有一个反向代理盒,它接收传入的连接/请求并“将它们发送”到目的地。目前,其中一个只允许将来自特定子网的连接转发到特定的 Web 服务器。这是为了让 VPN 用户重置特定的应用程序密码。不幸的是,它会转发对该 Web 服务器 URL 的任何请求。
我想要的是:我需要锁定它。而不是传递“https://webserver.com/whatever_they_type“对于服务器,我想要阻止除单个特定 URL 之外的所有内容。例如:”https://webserver.com/this-url/only“其他一切都会被阻止。
有人想过如何修改 NGINX 中的位置来实现这一点吗?
想知道这样的事情是否会有效?
location = /good_page/reset_password.html {
proxy_pass https://1.2.3.4:443;
#### Set headers ####
proxy_set_header Host webserver.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#### Only allow OpenVPN networks ###
allow 5.6.7.8/24;
deny all;
}
location ^~ /good_page {
deny all;
}
答案1
Ngnix 总是首先尝试匹配最具体的前缀位置,因此您可以设置两个位置:
server {
listen 80;
server_name example.com www.example.com;
access_log /<access log file> main;
error_log /<error log file> error;
# This is optional (any location)
location / {
# You can set a index.html with an error message
root /path/folder;
}
# Specific prefix
location /this-url/only/ {
proxy_pass http://<your server IP>;
<proxy configurations ...>;
}
}
笔记:当您访问http://example.com/this-url/only/nginx 转发到您的服务器 http:///this-url/only/如果您需要删除 /this-url/only/,您需要重写规则。