我遇到了使用nginx进行简单配置的问题。我有一个托管docker容器的服务器,所以nginx在容器中。所以我们调用网址foo.com
。我希望网址foo.com/service1
实际上只是在另一个端口上访问foo.com,所以实际上它会拉foo.com:4321
和foo.com/service2
来拉foo.com:5432
等等上。这是我遇到问题的配置。
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容器中运行的。谢谢!
答案 0 :(得分:2)
我认为你应该通过删除反向代理配置来检查你的foo.com
是否指向正确的IP地址。 E.g。
http {
server {
listen 80;
server_name foo.com;
location / {
}
}
}
然后,如果您的ip
地址已在端口80上运行服务,则应为每个服务指定server_name
,如我的示例所示。 Nginx只能通过server_name
来区分哪个服务响应哪个域。
*我的猜测是您忘记了server_name
选项。
答案 1 :(得分: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/;
}
}
}
答案 2 :(得分:1)
我猜你的问题与Nginx本身无关,而是与Docker网络有关。您提供的信息不足以得出详细的结论,但这里有几点建议:
在运行nginx容器的同一主机上运行一个简单的Docker容器,并从该容器内部尝试curl
(我已经看到了您可以调用{{1}的答案从运行Nginx的服务器,但它不是真的相同)
例如,如果运行nginx容器的服务器是OSX或Windows,它可能会使用具有自己的网络堆栈,IP地址,路由等的中间Linux虚拟机。
答案 3 :(得分:1)
这是我向内玻璃鱼发送的信息。查看使用proxy_redirect off& 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/;
}