代码之家  ›  专栏  ›  技术社区  ›  Anand Deshmukh

如何为多个服务配置nginx位置

  •  0
  • Anand Deshmukh  · 技术社区  · 6 年前

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

    我可以将nginx的请求转发到一个microservice

    如果我做了 curl http://xx.xx.xx.xx:8080/ 电话确实接通了 消费者门户 但是 它使用默认位置配置 /

    当我评论 1st 阻止并配置相同的 code 对于位置 /consumer-portal 并且做 curl http://xx.xx.xx.xx:8080/consumer-portal

    我得到:

    无法获取/消费者门户

    我有超过10个微服务,我想用nginx调用。

    下面是我的 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;
             }
    }
    }
    

    另外,请让我知道,如果我可以转发请求使用码头集装箱名称。

    例如,代替服务器 xx.xx.xx.xx:9006 我想用 server consumer-portal:9006

    请建议我需要做些什么改变 .形态 文件

    1 回复  |  直到 6 年前
        1
  •  3
  •   miknik    6 年前
        location  /consumer-portal {
            proxy_pass         http://consumer-portal;
    

    如果你的 proxy_pass url只是一个域/ip/主机名,没有设置uri,那么nginx将把完整的客户端请求url传递给与位置块匹配的请求代理。所以你的请求是

    http://xx.xx.xx.xx:8080/consumer-portal 将由NGNX代理

    http://consumer-portal/consumer-portal

    如果你的 代理通行证 url是一个域/ip/主机名,它还附加了一个uri,然后nginx将用指令中的uri替换原始客户机请求中位置块的匹配部分,然后将得到的url代理到上游服务器。所以如果你有 proxy_pass http://consumer-portal/new/location; 然后请求

    http://xx.xx.xx.xx:8080/consumer-portal/account 将由NGNX代理

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

    因为你想删除 /consumer-portal 从请求到上游代理,解决方案非常简单,只需在 代理通行证 指令,像这样:

    proxy_pass http://consumer-portal/;