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

如何使用nginx将请求转发给docker微服务

  •  2
  • Anand Deshmukh  · 技术社区  · 8 年前

    我想使用nginx作为反向代理将请求转发到微服务。 nginx和微服务都托管在Docker容器上。

    下面是我的nginx.conf文件

        worker_processes 1;
    
        events { worker_connections 1024; }
    
        #test
    
        http {
    
            sendfile on;
    
            # upstream docker-nginx {
            #     server nginx:80;
            # }
    
            upstream admin-portal {
                # server admin-portal:9006;
                server xx.xx.xx.xx:9006;
                # server localhost:9006;
    
            }
    
    server {
                listen 8080;
    
                location / {
                    proxy_pass         http://admin-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;
                }
    
    
            }
    
    
        }
    

    文档文件

    FROM nginx
    RUN apt-get update && apt-get install -y \
    curl 
    COPY nginx.conf /etc/nginx/nginx.conf
    EXPOSE 8080
    

    docker-compose.yml公司

    version: '3'
    services:
      nginx:
        restart: always
        build: ../../conf/
        volumes:
        - ./mysite.template:/etc/nginx/conf.d/mysite.template
        ports:
        - "8080:8080"
        networks:
          - cloud
    
    
    networks:
      cloud:
       driver: bridge
    
    • 我可以访问nginx主页 本地主机:8080
    • 管理门户是一个运行在9006端口上的微服务

    但是如果我这样做的话 本地主机:8080/管理门户/ 我的错误低于

    nginx_1 | 2018/07/04 07:08:17 [error] 7#7: *1 "/usr/share/nginx/html/admin-portal/index.html" is not found (2: No such file or directory), client: xx.xx.xx.xx, server: your-domain.com, request: "GET /admin-portal/ HTTP/1.1", host: "xx.xx.xx.xx:8080" nginx_1 | 2018/07/04 07:08:17 [error] 7#7: *1 open() "/usr/share/nginx/html/404.html" failed (2: No such file or directory), client: xx.xx.xx.xx, server: your-domain.com, request: "GET /admin-portal/ HTTP/1.1", host: "xx.xx.xx.xx:8080" nginx_1 | xx.xx.xx.xx - - [04/Jul/2018:07:08:17 +0000] "GET /admin-portal/ HTTP/1.1" 404 170 "-" "curl/7.47.0" admin-portal/

    请建议我需要做哪些更改,以便使用nginx将请求转发到管理门户

    1 回复  |  直到 8 年前
        1
  •  1
  •   Thanh Nguyen Van    8 年前
    upstream admin-portal {
        server 127.0.0.1:9006;
    }
    

    upstream admin-portal {
        server 172.17.0.1:9006;
    }
    

    172.17.0.1

    docker inspect containermicroservice_id

     upstream admin-portal {
        server ipaddressofmicroservicecontainer:9006;
    }
    

            server_name    localhost ipaddressofserver www.example.com;
    

    http://ipaddressofserver:8080/admin-portal

    #server {
    #            listen       8080;
    #            server_name     your-domain.com www.your-domain.com;
    #            root   /usr/share/nginx/html;
    #            index  index.html index.htm;
    
    #            error_page  404              /404.html;
    #            error_page   500 502 503 504  /50x.html;
    #            location = /50x.html {
    #                root   html;
    #            }
            }