我的头衔并不是最好的,我对网络的了解非常基础,对不起.
我想要实现的目标
我有一个在Archlinux上运行Nginx的盒子风箱,我用它作为我的家庭局域网的主要入口点从互联网(即工作,我只能到达端口80和443)通过反向代理设施使用不断变化的域名我无法控制,我们现在会打电话给home.net.
fanBox的端口80和443映射到home.net,这部分很容易.
我在防火墙后面有两个web服务器,web1.lan,web2.lan,web2ilo.lan.这两个应用程序都有各种应用程序(可能在不同的机器上具有相同的名称),可以通过标准URL直接在LAN上访问(名称作为示例给出,我无法控制内容):
http://web1.lan/PHPAdmin/
http://web1.lan/gallery/
http://web2.lan/PHPAdmin/
http://web2.lan/dlna/
…等等…
现在web2ilo.lan就是一个特例.它是HP服务器web2.lan的带外管理Web界面.该特定网络服务器仅提供1个应用程序,因此只能通过其根URL访问:
http://web2ilo/login.html
我的目标是通过home.net的子路径访问这些,如下所示:
http://home.net/web1/PHPAdmin/
http://home.net/web1/gallery/
http://home.net/web2/PHPAdmin/
http://home.net/web2/dlna/
http://home.net/web2ilo/login.html
我的问题
这几乎可以工作,但Web应用程序倾向于重写URL,以便在我登录后分别:
http://home.net/web1/PHPAdmin/login.PHP
http://home.net/web2ilo/login.html
浏览器分别重定向到
http://home.net/PHPAdmin/index.PHP
http://home.net/index.html
请注意,相对子路径web1和web2ilo已经消失了,逻辑上给了我@R_301_448@.
我的配置
到目前为止,我已经搜索了很多,我在Nginx中尝试了很多选项而不太了解我在做什么.这是我的配置,重现了这个问题.为了清楚起见,我已经离开了SSL.
server {
listen 443 ssl;
server_name localhost;
# SSL stuff left out for clarity
location / {
root /usr/share/Nginx/html;
index index.html index.htm;
}
location /web1/ {
proxy_set_header Host $host;
proxy_redirect off;
proxy_pass https://web1.lan/;
}
location /web2/ {
proxy_set_header Host $host;
proxy_redirect off;
proxy_pass https://web2.lan/;
}
location /web2ilo/ {
proxy_set_header Host $host;
proxy_redirect off;
proxy_pass https://web2ilo.lan/;
}
}
在第一个答案后
在第一个答案之后(谢谢!),我意识到我的设置远非常见,而且我可能会独自遇到麻烦.
那么在不触及前端端口和域/主机名的情况下访问防火墙后面的网络服务器会更好吗?
proxy_redirect http://web1.lan/ /web1/
见:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect
注意:这仅影响响应标头 – 不包括HTML内容中的任何链接或任何Javascript.
如果您遇到内容或Javascript中的链接问题,您可以修改后端服务器上的内容(您可能无法指定),或者调整代理解决方案,使前端路径与后端相同一些(例如,而不是http:// frontend / web1 / PHPAdmin你只需要http:// frontend / PHPAdmin).这将需要为每个应用程序添加位置指令,例如,
location /PHPAdmin/ {
proxy_set_header Host $host;
proxy_redirect off;
proxy_pass https://web1.lan/PHPAdmin/;
}