【问题标题】:How to configure NGINX Location for Multiple Service如何为多个服务配置 NGINX 位置
【发布时间】:2018-12-15 01:22:54
【问题描述】:

我想将 NGINX 配置为其他微服务的反向代理。

我能够将来自 NGINX 的请求转发到其中一个微服务

如果我这样做 curl http://xx.xx.xx.xx:8080/ 电话确实登陆了 consumer-portal 但是 它使用默认位置配置/

当我评论1st 块并为位置/consumer-portal 配置相同的code 并执行curl http://xx.xx.xx.xx:8080/consumer-portal

我明白了:

无法获取 /consumer-portal

我想使用 NGINX 调用超过 10 个微服务。

下面是我的nginx.conf文件

worker_processes 4;
events { 
        worker_connections 1024; 
    }

http {
    sendfile on;
    upstream consumer-portal {

         server xx.xx.xx.xx:9006;

    }
    upstream publisher-portal {

         server xx.xx.xx.xx:9001;
    }
    server {
        listen 8080;

        #1st Block
        #location / {
        #    proxy_pass         http://consumer-portal;
        #    proxy_redirect     off;
        #    proxy_set_header   Host $host;
        #    proxy_set_header   X-Real-IP $remote_addr;
        #    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        #    proxy_set_header   X-Forwarded-Host $server_name;
        #}

        #2nd Block
        location  /consumer-portal {
            proxy_pass         http://consumer-portal;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }

        #3rd Block
        location /publisher-portal/ {
             proxy_pass         http://publisher-portal;
             proxy_redirect     off;
             proxy_set_header   Host $host;
             proxy_set_header   X-Real-IP $remote_addr;
             proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header   X-Forwarded-Host $server_name;
         }
}
}

另外,如果我可以使用 docker 容器名称转发请求,请告诉我。

例如,我想使用 server consumer-portal:9006 而不是服务器 xx.xx.xx.xx:9006

请建议我需要对 .conf 文件进行哪些更改。

【问题讨论】:

    标签: docker nginx docker-machine nginx-location nginx-reverse-proxy


    【解决方案1】:
        location  /consumer-portal {
            proxy_pass         http://consumer-portal;
    

    如果您的proxy_pass URL 只是一个域/IP/主机名并且没有设置 URI,那么 Nginx 会将完整的客户端请求 URL 传递给与位置块匹配的请求的代理。所以这里是你的要求

    http://xx.xx.xx.xx:8080/consumer-portal 将被 Nginx 代理到

    http://consumer-portal/consumer-portal

    如果您的proxy_pass URL 是一个域/IP/主机名,并且还附加了一个 URI,那么 Nginx 将使用指令中的 URI 替换原始客户端请求中的位置块的匹配部分,然后代理生成的 URL到上游服务器。因此,如果您有 proxy_pass http://consumer-portal/new/location; 则请求

    http://xx.xx.xx.xx:8080/consumer-portal/account 会被 Nginx 代理到

    http://consumer-portal/new/location/account

    当您想从对上游代理的请求中删除 /consumer-portal 时,解决方案就像在您的 proxy_pass 指令中添加斜杠一样简单,如下所示:

    proxy_pass http://consumer-portal/;

    【讨论】:

      猜你喜欢
      • 2018-03-27
      • 2021-05-10
      • 2018-04-15
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 2012-11-07
      • 2013-12-07
      • 1970-01-01
      相关资源
      最近更新 更多