Nginx重定向在Ubuntu Trusty上

时间:2014-12-12 16:35:09

标签: nginx

我在路由器后面有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

有谁知道如何做到这一点?

2 个答案:

答案 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;
   }
}