如何使用 Nginx 反向代理隐藏后端 URL/URI

如何使用 Nginx 反向代理隐藏后端 URL/URI

我们公司开发了一款新的 SaaS 解决方案,供经销商及其客户使用。对于我们经销商的客户来说,该解决方案应该被贴上品牌标签,就像是经销商自己开发的软件应用程序一样。除了一件事,即 URL,这一点已经完全实现。

我做了很多关于如何隐藏 URL/URI 的研究,反向代理似乎是最好的解决方案。我读了一些关于可以用来构建反向代理的不同软件应用程序的文章,Nginx 似乎非常适合这项工作。

我安装了一个新的 CentOS 服务器,并在其上安装了 Nginx。这非常简单(即使对于我这个 Linix 新手来说也是如此)。在对配置文件进行一番努力之后,我找到了如何将 Nginx 配置为反向代理的方法。

现在,当我浏览我的代理 IP(fe 192.168.1.100/SaaS)时,我会看到具有另一个 IP 的 SaaS 解决方案。在地址栏中,我看到了反向代理 IP,正如我所希望的那样!

当我单击 SaaS 解决方案中的链接或按钮后,地址栏中的 IP 会更改为 SaaS 解决方案的真实 IP。

我读以及更多主题,但我无法让它发挥作用。

我的配置“位置”部分目前看起来像这样:

location /SaaS {
        proxy_pass http://192.168.1.200/login/;
}

一旦将其更改为此(我在网上的多篇文章中找到的正确配置)

location /SaaS {
        proxy_pass http://192.168.1.200/login;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        include /etc/nginx/proxy_params;
}

我收到 Nginx 错误“未找到您要查找的页面。”我做错了什么?

答案1

您需要使用查找/替换插件或更新 SaaS 应用中的每个链接以使用 nginx ip(强烈建议使用 dns)

https://www.nginx.com/resources/wiki/modules/substitutions/

用代理 ip 替换后端 ip,通常可以像您一样重写 $host,但似乎您的链接没有使用变量来设置其 url。

例子:

server {
    listen       80;
    listen  [::]:80;
    server_name  sub-test.jacobdevans.com;
    root         /var/www/html/test;
 location / {

            sub_filter 'abc-test.jacobdevans.com' 'sub-test.jacobdevans.com';
            sub_filter_once off;
        }

}

server {
    listen       80;
    listen  [::]:80;
    server_name  abc-test.jacobdevans.com;
    root         /var/www/html/test;

 location / {

            sub_filter '123-test.jacobdevans.com' 'abc-test.jacobdevans.com';
            sub_filter_once off;
        }

}

server {
    listen       80;
    listen  [::]:80;
    server_name  123-test.jacobdevans.com;
    root         /var/www/html/test;

 location / {

            sub_filter 'sub-test.jacobdevans.com' '123-test.jacobdevans.com';
            sub_filter_once off;

        }
}

http://sub-test.jacobdevans.com/

相关内容