Nginx反向代理配置

时间:2017-02-25 04:52:11

标签: nginx reverse-proxy

我遇到了使用nginx进行简单配置的问题。我有一个托管docker容器的服务器,所以nginx在容器中。所以我们调用网址foo.com。我希望网址foo.com/service1实际上只是在另一个端口上访问foo.com,所以实际上它会拉foo.com:4321foo.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容器中运行的。谢谢!

4 个答案:

答案 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网络有关。您提供的信息不足以得出详细的结论,但这里有几点建议:

  1. 在运行nginx容器的同一主机上运行一个简单的Docker容器,并从该容器内部尝试curl(我已经看到了您可以调用{{1}的答案从运行Nginx的服务器,但它不是真的相同)

  2. 例如,如果运行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/;

    }
相关问题