使用Nginx在VPN下无法找到上游主机的问题

134次阅读
没有评论

问题描述

正在尝试使用nordlynx容器作为VPN,以便使flask_app容器通过VPN连接。然而,在这样做时,nginx容器无法找到上游的flask_app。是否有人知道这里出了什么问题?

用户提供的docker-compose.yml配置如下:

version: '3'
services:
  nordlynx:
    image: ghcr.io/bubuntux/nordlynx
    network_mode: bridge
    cap_add:
      - NET_ADMIN
    environment:
      - PRIVATE_KEY=REDACTED
      - PUID=1000
      - PGID=1000
      - ALLOWED_IPS=0.0.0.0/0
      - NET_LOCAL=192.168.50.0/24,10.8.0.0/24
      - QUERY=filters\[country_id\]=228&filters\[servers_groups\]\[identifier\]=legacy_p2p
    ports:
      - 8080:8080
      - 80:80
    restart: unless-stopped

  flask_app:
    image: parkerr1992/iptv-proxy
    network_mode: service:nordlynx
    restart: unless-stopped
    environment:
      - M3U_LOCATION=REDACTED
      - RELOAD_INTERVAL_MIN=60
      - LISTEN_PORT=8080
    depends_on:
      - nordlynx

  nginx:
    image: nginx:latest
    container_name: nginx
    network_mode: service:nordlynx
    restart: unless-stopped
    volumes:
      - ./nginx/templates:/etc/nginx/templates
    environment:
      - FLASK_PORT=8080
      - LISTEN_PORT=80
    depends_on:
      - flask_app

default.conf.template配置如下:

server {
    listen ${LISTEN_PORT};
    server_name docker_flask_gunicorn_nginx;
    location / {
        proxy_pass http://flask_app:${FLASK_PORT};
        # Do not change this
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

解决方案

请注意以下操作可能涉及版本差异及修改前做好备份。

确认容器之间的网络连接

在您的docker-compose.yml中,您已经设置了正确的依赖关系,使得flask_app依赖于nordlynx。然而,您提到nginx容器无法找到上游的flask_app,这可能涉及到网络连接的问题。

确认网络模式

您在flask_appnginx服务中使用了network_mode: service:nordlynx,这将使这两个服务与nordlynx服务共享相同的网络命名空间。请确保这是您所需的,因为这可能会影响到容器之间的通信。

确认代理设置

在您的default.conf.template中,您使用了proxy_pass http://flask_app:${FLASK_PORT};来进行代理传递。请确保${FLASK_PORT}的值为正确的端口号。

确认容器启动顺序

尽管您在flask_appnginx服务中使用了depends_on来指定依赖关系,但这只确保了容器的启动顺序,并不能保证容器内的应用程序已经完全就绪。在容器之间建立连接之前,确保应用程序已经准备好处理传入的请求。

日志和错误信息

如果问题仍然存在,查看容器的日志以获取更多信息。nginx容器的日志可能会显示有关代理连接问题的信息,而flask_app容器的日志可能会显示应用程序启动时遇到的问题。

考虑网络配置

您使用的容器似乎涉及到网络配置和代理设置。在调试过程中,您可能需要对网络和代理配置进行详细的检查,以确保容器之间的通信正常。

总结

在使用Docker容器和Nginx代理时,确保容器之间的网络连接和通信配置正确。检查网络模式、代理设置、容器启动顺序以及日志信息,以便找到并解决容器无法找到上游主机的问题。如果问题仍然存在,请考虑网络和代理配置方面的详细检查,以确保容器正常运行。

希望这些信息能够帮助您解决问题,如果需要更进一步的帮助,请随时提问。

正文完