NGINX 反向代理未按预期工作

NGINX 反向代理未按预期工作

我正在尝试通过 Docker 容器部署应用程序并将其反向代理到我的目标端点。

我的docker compose文件如下所示:

version: '3.4'

services:
  monitor.api:
    image: ${DOCKER_REGISTRY-}monitorapi
    ports:
     - "5001:443"
    build:
      context: .
      dockerfile: monitor.API/Dockerfile  
  webapp:
     image: ${DOCKER_REGISTRY-}monitorwebapp
     ports:
     - "4205:443"
     - "4206:80"
     build:
        context: ./monitor-webApp
        args:
        - BASE_API_URL=${BASE_API_URL}
        dockerfile: Dockerfile

两个容器都已成功构建并运行。为了访问它们,我尝试使用以下配置设置 Nginx 服务器:

server {
    listen 80;
    server_name <HOST IP>;

    sendfile on;
    default_type application/octet-stream;

    gzip on;
    gzip_http_version 1.1;
    gzip_disable "MSIE [1-6]\.";
    gzip_min_length 256;
    gzip_vary on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_comp_level 9;

    root /usr/share/nginx/html;

    location /monitorwebapp/ {
        proxy_pass http://<HOST IP>:4206/;
        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-Proto $scheme;
    }

    location /monitorapi/ {
        proxy_pass https://<HOST IP>:5001/api/;
        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-Proto $scheme;
    }
}

因此,我的预期是,如果我访问 http://HOSTIP/monitorwebapp,我应该可以访问我的 webapp。但是,我只得到 404,而我访问它的唯一方法是通过:http://HOSTIP:4206。

错误日志中也没有内容。有什么办法可以修复这个问题吗?

答案1

我使用了类似的配置,但使用了专门配置的隔离桥接网络;并且 nginx 作为 docker 容器。那么在隔离桥接网络中您不需要 https - 因为它都在您的单个主机内。

因此,在 docker compose 中,要有一个独立的桥接网络,您需要..(我没有正确获得 yml 的所有缩进)。我也没有放入 nginx 部分。

monitor.api  
  ...  
  networks:  
    - <isol_bridge_network>  

webapp:  
  ...  
  networks:  
    - <isol_bridge_network>  

networks:   
  <isol_bridge_network>:  

然后在 nginx 配置中。添加内部 DNS 解析器。并将代理传递指向桥接网络上的服务名称和端口 - 而不是外部 IP 地址和端口。要清楚的是,端口 4206 和 5001 是外部可见端口。

location /monitorwebapp/ {  
  resolver 127.0.0.11 valid=10s;  
  set $files        monitorwebapp:80;  
  proxy_pass        http://$files;  
  ...  
}  

location /monitorapi/ {  
  resolver 127.0.0.11 valid=10s;  
  set $files        monitorapi:80;  
  proxy_pass        http://$files;  
  ...  
}  

希望这一切都有意义......

相关内容