2017-02-25 226 views
3

我遇到了一个简单的配置与nginx一起工作的问题。我有一个服务器主机码头容器,所以nginx是在一个容器。所以让我们打电话给url foo.com。我希望url foo.com/service1实际上只是转到另一个端口上的foo.com,所以它实际上会拉foo.com:4321foo.com/service2foo.com:5432等等。这是我一直有问题的配置。Nginx反向代理配置

http { 
    server { 
     listen 0.0.0.0:80; 

     location /service1/ { 
      proxy_pass http://192.168.0.2:4321/; 
     } 

     location /service2/ { 
      proxy_pass http://192.168.0.2:5432/; 
     } 

    } 
} 

所以服务和nginx的生活在192.168.0.2。能够做到这一点的首选方式是什么?先谢谢你!

作为一个方面说明,这是运行在码头集装箱。谢谢!

+0

您能够访问主机服务器上的“http://192.168.0.2:4321 /”和“http://192.168.0.2:5432 /”吗? –

+0

是的,我可以在运行nginx的计算机上查找两个列出的地址和端口,我也可以从本地计算机上打开这些端口上的页面,而不会出现问题。 – user3003510

+0

你能够通过以下方式在你的nginx容器中得到响应:curl'http://192.168.0.2:4321/'和'http://192.168.0.2:5432 /'? – shizhz

回答

1
http { 
    server { 
     listen 80; 
     server_name foo.com; 

     location /service1/ { 
      proxy_pass http://192.168.0.2:4321/; 
     } 

     location /service2/ { 
      proxy_pass http://192.168.0.2:5432/; 
     } 

    } 
} 
+0

这与我所拥有的几乎相同。我仍然获得与我发布的504网关超时相同的结果 – user3003510

1

我有你的问题是不相关的Nginx的本身猜测,而是它关系到泊坞联网。你提供足够的信息来做出详细结论,但这里是一些建议:

  1. 在何处运行nginx的容器运行,并尝试curl从容器(I”里面在同一台主机的简单泊坞容器已经看到你的答案,你可以从运行Nginx的服务器上调用curl,但它不是真的一样)

  2. 例如,如果运行nginx容器的服务器是OSX或Windows,它可能会使用中间Linux虚拟机机器有自己的网络堆栈,IP地址,路由等。

1

这是我的conf发送到内部玻璃鱼。退房使用proxy_redirect关闭& proxy_set_header X-NginX-Proxy true;

#Glassfish 
    location /MyService/ { 

      index index.html; 

      add_header Access-Control-Allow-Origin $http_origin; 

      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-NginX-Proxy true; 
      proxy_ssl_session_reuse off; 
      proxy_set_header Host $http_host; 
      proxy_redirect off; 
      proxy_set_header X-Forwarded-Server $host; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_pass http://127.0.0.1:18000/MyService/; 

    } 
2

,我认为你应该检查你是否foo.com通过移除反向代理配置指向正确的IP地址或不是第一。例如。

http { 
    server { 
     listen 80; 
     server_name foo.com; 

     location/{ 
     } 
    } 
} 

然后,如果你ip地址已经端口80上运行的服务,您应该指定server_name每个服务就像在我的例子。 Nginx只能通过server_name来区分哪个服务响应哪个域。

*我的猜测是你忘了server_name选项。