Ubuntu Trusty上的Nginx重定向

Ubuntu Trusty上的Nginx重定向,nginx,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 路由器端口将所

我在路由器、防火墙后面有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指向processmaker.domain1.com


有人知道怎么做吗

如果防火墙后面的DNS正确指向processmaker,为什么不在Nginx中为processmaker创建另一个条目

server {
    listen 80;
    server_name "~^(?<sub>.+)*\.(?<domain>.*)$";
    proxy_pass http://$domain/$sub$request_uri;
}
正如您所看到的,配置很简单。每个位置都可以使用自己的代理通行证

关于代理\传递域末尾的斜杠,您可以阅读

如果使用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/. 您可以找到更多信息

但是,您也可以仅使用域来执行此操作。如果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;
   }
}

可能是因为我不完全理解语法。我必须找到一些文档并阅读更多。但是谢谢你给我指出了正确的方向。我尝试了你的建议,但是nginx说这里不允许使用proxy\u-pass指令,proxy\u-pass指令只允许在位置块中使用。你应该用位置块包装这个指令。你能用另一种方式解释吗。请告诉我,每个域名的IP可以改变IP,只需要知道有多少,路由器的IP,物理服务器的IP。我已经添加了服务器和路由器的IP地址。此外,所有服务器工作正常,可以在内部lan上访问。我只是想从互联网上重定向。所以,www.domain1.com有公共IP指向你的路由器,对吗?路由器将流量转发到192.168.10.60,其中nginx正在运行,nginx将此流量代理到192.168.10.70。现在您想代理192.168.10.90以获取www.domain1.com/processmaker/的一些URI,对吗?是的,您是正确的,执行重定向的nginx正在esja.domain1.com 192.168.10.60上运行。非常感谢您的帮助。首先花时间去理解,然后分享你的专业知识。这是非常有帮助和教育意义的。我尝试了您的解决方案,它重定向到服务器processmaker.domain1.com。但是,在internet上,url变为www.domain1.com/processmaker/。但是,当您在内部网络上时,它就变成了。在内部网络上一切正常。但是当在internet上图像不显示,并且当您尝试登录未找到页面时,我认为重定向将无法正常工作,除非DNS在internet和内部网络上都相同。所以我想我可能必须要求我的服务提供商在DNS中声明processmaker.domain1.com?您可以尝试将其添加到nginx服务器上的主机文件中。还有关于图像。。。如果图像使用绝对路径,是的,它将不起作用。使用第二个解决方案和单独域的最佳方法。关于将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;
   }
}