首页 > 解决方案 > Nginx 反向代理 docker 容器 LAN

问题描述

我无法理解 nginx 反向代理是如何工作的,也许有人可以提供帮助。假设我在局域网中使用 docker 的服务器的 IP 为 192.168.0.3 我有这样的 docker-compose 文件:

version: '2'

  angular-on-nginx:
    build: angular_client
    ports:
      - "80:80"
    volumes:
      - ./angular_client/dist:/usr/share/nginx/html
      - ./angular_client/default.conf:/etc/nginx/conf.d/default.conf

  express:
    build: express_server
    ports:
      - "4444:4444"
    volumes:
      - ./express_server/:/usr/src/app 
    links:
      - database
    depends_on:
      - database

  database:
    image: mongo
    ports:
      - "27777:27777"
    volumes:
      - ./mongodb_data:/data/db

在 angular-on-nginx 容器上有 angular app 和 nginx 具有这样的配置:

server {
    listen       80;
    server_name  localhost;

    root   /usr/share/nginx/html;
    index  index.html index.htm;

    location / {
        try_files $uri $uri/ /index.html;
    }
    location /express {
        proxy_pass http://192.168.0.3:4000/;
    }   
}

但这在键入 192.168.0.3 angular web app 加载时不起作用并且可以正常工作。当输入 192.168.0.3:4444 express 服务器时响应很好,但是当输入 192.168.0.3/express 时有 502 bad gateway。如何使它起作用,以便当我输入 192.168.0.3/express 时,我将得到与输入 192.168.0.3:4444 时相同的结果?

标签: dockernginxlocalhost

解决方案


不知道为什么,但这有效。

server {
    listen       80;
    listen       [::]:80;
    server_name  192.168.0.3;

    root   /usr/share/nginx/html;
    index  index.html index.htm;

    location / {
        try_files $uri $uri/ /index.html;
    }
    location /express/ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://192.168.0.3:4444;
    }   
}

推荐阅读