【问题标题】:Nginx Proxy Upstream Server Docker Compose - 502 Bad Gateway Connection RefusedNginx 代理上游服务器 Docker Compose - 502 Bad Gateway Connection Refused
【发布时间】:2019-01-06 20:50:16
【问题描述】:

我正在尝试使用 Docker Compose 将与我的 Web 应用程序相关的所有内容容器化,包括 Nginx 和 SSL 证书。为此,我使用了Nginx Proxy image from JWilderLetsEncrypt Companion,但无法让 nginx 代理正常工作,结果是:

Nginx 502 网关错误

[错误] 31160#0:*35 connect() 失败(111:连接被拒绝),同时连接到上游,客户端:xx.xx.xx.xx,服务器:domain.com,请求:“GET /dev/ HTTP/1.1”,上游:“webapp://127.0.0.1:8080”,主机:“domain.com”

这仅在尝试设置 Nginx 代理和 SSL 证书时发生,所以我知道这是这些容器中的一个或两个的配置问题。如果有人能发现我哪里出错了,我将非常感激!

这里是有问题的容器:

version: '3.1'

networks:
  mywebapp:

services:
  nginx-proxy:
    container_name: nginx-proxy
    build: ./env/nginx-proxy
    networks:
      - mywebapp
    ports:
      - 80:80
      - 443:443
    env_file:
      - ./env/nginx-proxy/.env
    depends_on:
      - webapp
    tty: true
    volumes:
      - ./src:/home/www/mywebapp/src
      - ./storage:/home/www/storage/mywebapp
      - ./data/nginx-proxy/logs:/var/log/nginx
      - ./env/nginx-proxy/webserver/nginx.conf:/etc/nginx/nginx.conf
      - ./env/nginx-proxy/webserver/conf.d:/etc/nginx/conf.d
      - ./env/nginx-proxy/webserver/vhost.d:/etc/nginx/vhost.d
      - ./env/nginx-proxy/webserver/defaults:/etc/nginx/defaults
      - ./env/nginx-proxy/webserver/global:/etc/nginx/global
      - ./env/nginx-proxy/ssl/certs:/etc/nginx/certs
      - ./env/nginx-proxy/share:/usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
    labels:
      com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true"

  letsencrypt:
    restart: always
    container_name: letsencrypt
    image: jrcs/letsencrypt-nginx-proxy-companion
    env_file:
      - ./env/letsencrypt/.env
    volumes:
      - ./data/letsencrypt/logs:/var/log
      - ./env/nginx-proxy/webserver/nginx.conf:/etc/nginx/nginx.conf
      - ./env/nginx-proxy/webserver/conf.d:/etc/nginx/conf.d
      - ./env/nginx-proxy/webserver/vhost.d:/etc/nginx/vhost.d
      - ./env/nginx-proxy/webserver/defaults:/etc/nginx/defaults
      - ./env/nginx-proxy/webserver/global:/etc/nginx/global
      - ./env/nginx-proxy/ssl/certs:/etc/nginx/certs
      - ./env/nginx-proxy/share:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    depends_on:
      - nginx-proxy

  webapp:
    container_name: webapp
    build: ./env/webapp
    hostname: webapp
    networks:
      - mywebapp
    ports:
      - 9000:9000
      - 8080:8080
    volumes:
      - ./env/composer:/home/www/.composer
      - ./env/global/bashrc:/home/www/.bashrc
      - ./data/bash/.bash_history:/home/www/.bash_history
      - ~/.ssh:/home/www/.ssh:ro
      - ~/.gitconfig:/home/www/.gitconfig:ro
      - ./storage:/home/www/storage/mywebapp
      - ./src:/home/www/mywebapp/src

重点是

  • Webapp 是我运行 PHP、MySQL 和 Nginx 网络服务器的 Web 应用程序的源代码。 webapp 网络服务器公开并侦听端口 8080 以提供 PHP 文件。
  • Nginx 代理 暴露标准端口 443 和 80 并且 代理在端口 8080 上传递给 webapp
  • LetsEncrypt Companion 生成证书并更新。

Nginx 代理服务器配置:

upstream webapp {
    server 127.0.0.1:8080;
}

server {

    listen 80;
    listen [::]:80;

    server_name webapp.localhost;

    location / {
        proxy_pass http://webapp;
    }
}

server {

    # SSL configuration
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ssl_certificate certs/default.crt;
    ssl_certificate_key certs/default.key;

    include /etc/nginx/global/ssl-params.conf;

    server_name webapp.localhost;

    location / {
        proxy_pass http://webapp;
    }
}

Webapp 网络服务器配置:

server {
    listen 8080;
    listen [::]:8080;

    server_name webapp.localhost;

    root /home/www/webapp/src;
    index index.php;

    include /etc/nginx/defaults/php.conf;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }
}

访问http://webapp.localhost:8080时,我可以看到webapp webserver服务页面没有问题,所以我怀疑我的Nginx代理服务器配置有问题。

感谢阅读。

【问题讨论】:

    标签: docker nginx docker-compose reverse-proxy jwilder-nginx-proxy


    【解决方案1】:

    由于 nginx 和 webapp 位于两个单独的容器上,因此 nginx 无法访问 localhost(127.0.0.1) 上的 webapp,因为您已为上游配置:

    upstream webapp {
        server 127.0.0.1:8080;
    }
    

    将其更改为webapp:8080

    【讨论】:

    • 我只是喜欢向像你这样的传奇人物抛出大胖子!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 2019-02-26
    • 2022-01-15
    • 2019-07-09
    • 1970-01-01
    相关资源
    最近更新 更多