首页 > 解决方案 > 连接到上游 jwilder/ngnix-proxy 时没有实时上游

问题描述

我不清楚文档,这是我的第一次部署,由于没有实时上游,我一直收到错误为 502。

这是代码。

docker.staging.yml

version: '3.8'

networks:
  public_network:
      name: public_network
      driver: bridge

services:
  web:
    build: 
      context: .
      dockerfile: Dockerfile.prod
    command: gunicorn djangotango.wsgi:application --bind 0.0.0.0:8000
    volumes:
      # - .:/home/app/web/
      - static_volume:/home/app/web/static
      - media_volume:/home/app/web/media 
     
    expose:
      - 8000
    env_file:
      - ./.env.staging
    

  db:
    image: postgres:12.0-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    env_file:
      - ./.env.staging.db
    depends_on: 
      - web
  
  nginx-proxy:
    build: ./nginx
    restart: always
    ports:
      - 443:443  
      - 80:80
    volumes:
      - static_volume:/home/app/web/static
      - media_volume:/home/app/web/media 
      - certs:/etc/nginx/certs
      - html:/usr/share/nginx/html
      - vhost:/etc/nginx/vhost.d
      - /var/run/docker.sock:/tmp/docker.sock:ro
    depends_on:
      - web
    networks:
      - public_network

  nginx-proxy-letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    env_file:
      - .env.staging.proxy-companion
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - certs:/etc/nginx/certs
      - html:/usr/share/nginx/html
      - vhost:/etc/nginx/vhost.d
    depends_on:
      - nginx-proxy
    networks:
      - public_network
    
   
volumes:
  postgres_data:
  pgadmin-data:
  static_volume:
  media_volume:
  certs:
  html:
  vhost:

.env.staging.db

VIRTUAL_HOST=djangotango.meghaggarwal.com
VIRTUAL_PORT=8000
LETSENCRYPT_HOST=djangotango.meghaggarwal.com

ngnix Docekrfile

FROM jwilder/nginx-proxy
COPY vhost.d/default /etc/nginx/vhost.d/default
COPY custom.conf /etc/nginx/conf.d/custom.conf

ngnix->vhost.d->default

upstream djangotango {
    server web:8000;
}

server {

    listen 80;
    listen 443;
    server_name djangotango.meghaggarwal.com

    location / {
        proxy_pass http://djangotango;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
     
    }

    location /static/ {
      alias /home/app/web/static/;
      add_header Access-Control-Allow-Origin *;
    }

        location /media/ {
        alias /home/app/web/media/;
        add_header Access-Control-Allow-Origin *;

}

}
      

custom.conf

client_max_body_size 10M;

这里我的 web 是运行应用程序的容器。我想我误解了这些概念并且没有正确配置nginx默认conf文件。Jwilder 反向 ngnix 代理是我不明白的。

请帮帮我。我已经浏览了大多数文档,但没有运气..谢谢

我已经展示了此处所需的最少代码。

标签: pythondjangodockernginxjwilder-nginx-proxy

解决方案


我发现了导致上游错误的错误。

由于我为 web 公开端口 8000,我的 nginx 无法与 web 容器通信,因为它们没有共享同一个网络。

因此,最好将网络从 compose 中删除,以便它们可以相互通信,这是容器的默认行为。


推荐阅读