NGINX 代理传递到具有内部重定向的外部站点

NGINX Proxy pass to external site that has internal redirect

我正在尝试配置一个 nginx 代理,通过代理传递隐藏内部站点,但没有成功。 我使用的配置是

location /internal1/ {
   proxy_set_header X-Forwarded-Host $host;
   proxy_set_header X-Forwarded-Server $host;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_connect_timeout 15;
   proxy_read_timeout 180;
   proxy_pass http://internal1/;
}

upstream internal1 {
   server a.b.c.d:80;
}

问题是,当我尝试访问 a.b.c.d 站点时,它会重定向到应该是 http://a.b.c.d/login and after i login it redirect at another page http://a.b.c.d/device/config 的登录页面。使用代理重定向到 http://mysite/login 和 http://mysite/device/config

使代理不起作用并显示找不到资源,我看不到任何页面。

如果我将 proxy_pass 值更改为 http://a.b.c.d/login/,它会在 http://mysite/internal1 显示登录页面,并且在我登录后它显示找不到资源,因为它试图访问 http ://mysite/device/config.

有人对如何以正确的方式配置它有一些建议吗?

感谢大家的回答

编辑: 抱歉回答晚了,但同时我很忙,无论如何该解决方案适用于 1 台设备,但现在我连接的所有设备都只转到该设备的“内部”页面,我无法区分更多,因为 nginx 不支持相同的位置多个配置(所有设备都有 ip/page1 )

location /page1/
{ 
 proxy_pass mysite/internal1/page1;
 proxy_redirect off;
 proxy_set_header Host $host;
}

编辑2: 不幸的是,不可能将所有设备直接暴露在互联网上。我找到的解决方案是:

创建一个自定义 DNS 子域,然后为每个设备创建一个不同的 nginx 服务器块,每个设备都有自己的位置和未来 redirect/proxy ecc...

如果您想公开位于内部网络中的所有设备的网络 UI 以便可以通过 Internet 访问 - 那么您将必须为以下内容创建一个子域(以及相应的虚拟主机配置)每个设备。

假设指向您的 nginX 的域是 mydevices.net 并且您有 2 台设备 - 在 192.168.2.10 和 192.168.2.20

那么您的 nginX 配置将如下所示:

server {
  listen 80;
  server_name dev1.mydevices.net;

  location / {
    proxy_pass internal1;
    proxy_redirect default;
  }
}

upstream internal1 {
   server 192.168.2.10;
}

server {
  listen 80;
  server_name dev2.mydevices.net;

  location / {
    proxy_pass internal2;
    proxy_redirect default;
  }
}

upstream internal2 {
   server 192.168.2.20;
}