我们公司开发了一款新的 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;
}
}