我有一个简单的configuration来处理nginx的问题。 我有一个服务器,主机docker集装箱,所以nginx是在一个容器。 所以让我们打电话给url foo.com
。 我想要的urlfoo.com/service1
实际上只是去foo.com在另一个端口,所以它实际上是拉foo.com:4321
和foo.com/service2
拉foo.com:5432
等上。 这是我一直有问题的configuration。
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。 什么是能够做到这一点的首选方式? 先谢谢你!
作为一个方面说明,这是运行在docker集装箱。 谢谢!
我认为你应该检查你的foo.com
是否指向正确的IP地址,或者先删除反向代理配置。 例如
http { server { listen 80; server_name foo.com; location / { } } }
然后,如果你的ip
地址已经有一个端口80上运行的服务,你应该为我的例子中的每个服务指定server_name
。 Nginx只能通过server_name
区分哪个服务响应哪个域。
*我的猜测是你忘记了server_name
选项。
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/; } } }
我猜你的问题与Nginx本身无关,而是与Docker网络有关。 您提供的信息不足以作出详细的结论,但这里有几点建议:
在运行nginx容器的同一台主机上运行一个简单的Docker容器,并从该容器中尝试curl
(我已经看到了你的答案,你可以从运行Nginx的服务器调用curl
,但实际上并不一样)
例如,如果运行nginx容器的服务器是OSX或Windows,则可以使用具有自己的网络堆栈,IP地址,路由等的中间Linux虚拟机。
这是我的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/; }