我在路由器后面有4台服务器,防火墙
www.domain1.com
mail.domain1.com
www.domain2.com
由服务提供商在DNS中设置
4台服务器命名为:
esja.domain1.com 192.168.10.60
mail.domain1.com 192.168.10.50
processmaker.domain1.com 192.168.10.90
hekla.domain2.com 192.168.10.70
路由器192.168.10.1
路由器端口将所有内容转发到端口80上的esja.domain1.com
服务器esja.domain1.com上的Nginx正确地使用以下方式将流量转发到hekla.domain2.com:
server {
listen 80;
server_name www.domain1.com;
location / {
proxy_pass http://www.domain1.com;
}
}
我无法做的是将流量重定向到processmaker.domain1.com
我想知道如果不要求服务提供商在外部设置另一个域,这是否可行?
I was wondering if it is possible to use www.domain1.com/processmaker and somehow capture what is after the / and redirect based on that to processmaker.domain1.com?
防火墙后面的DNS正确地将进程制作者指向processmaker.domain1.com
有谁知道如何做到这一点?
答案 0 :(得分:0)
如果防火墙后面的DNS正确指向了进程制造商,为什么不在Nginx中为进程制作者创建另一个条目?
server {
listen 80;
server_name "~^(?<sub>.+)*\.(?<domain>.*)$";
proxy_pass http://$domain/$sub$request_uri;
}
答案 1 :(得分:0)
server {
listen 192.168.10.60:80; # ip not required
server_name www.domain1.com; # if this is single server block in config, all other domain come here too
location /processmaker/ {
proxy_pass http://processmaker.domain1.com/; # or ip can be used proxy_pass http://192.168.10.90/;
# slash at the end of domain is important
proxy_set_header Host $host; # not required if at processmaker we don't care about domain
}
location / { # all other requests come here
proxy_pass http://hekla.domain2.com; # or http://192.168.10.70, here we don't need slash
proxy_set_header Host $host;
}
}
如您所见,配置很简单。每个位置都可以使用自己的proxy_pass。
关于proxy_pass域末尾的斜杠,您可以阅读here
如果使用URI指定了proxy_pass指令,那么当请求传递给服务器时,与该位置匹配的规范化请求URI的部分将被指令中指定的URI替换:
因此,您的processmaker.domain1.com将被请求URI /
。
此外,nginx将修复任何HTTP重定向 - URI将是正确的。如果processmaker.domain1.com服务器将重定向到http://processmaker.domain1.com/test/
- nginx将其重写为http://www.domain1.com/processmaker/test/
。您可以找到更多信息here
但你也可以只使用域名。如果www.domain1.com和www.domain2.com指向路由器,您可以代理一个到hekla,一个代理到processmaker
server {
listen 192.168.10.60:80;
server_name www.domain1.com;
location / {
proxy_pass http://hekla.domain2.com;
proxy_set_header Host $host;
}
}
server {
listen 192.168.10.60:80;
server_name www.domain2.com;
location / {
proxy_pass http://processmaker.domain1.com;
proxy_set_header Host $host;
}
}
但最简单的方法是使用外部路由器ip将processmaker.domain1.com添加到DNS。在这种情况下,您的服务器配置将是
server {
listen 192.168.10.60:80;
server_name processmaker.domain1.com;
location / {
proxy_pass http://192.168.10.90;
proxy_set_header Host $host;
}
}