使用nginx反向代理配置来处理多个Django app docker容器时遇到麻烦

问题描述 投票:1回答:2

我有Nginx反向代理配置的麻烦

我的服务器上有一些带有Django网站的docker容器,我正在尝试使用jwilder / nginx-proxy服务它们。

我究竟做错了什么?

========项目结构========

nginx的代理

  • 泊坞窗,compose.yml

django_project_A

  • SRC django文件(db.sqlite3 main_app manage.py django_project_A static)
  • 泊坞窗,compose.yml
  • Dockerfile
  • 配置 nginx的 nginx.conf

django_project_B

......和django_project_A一样

=============== nginx-proxy docker-compose.yml ==================

version: '3'

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    restart: always
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro

networks:
  default:
    external:
      name: nginx-proxy

=============== django_project_A docker-compose.yml ===================================================:=

version: '2'  
services:  
  nginx:
    image: nginx:latest
    container_name: nginx_django_project_A
    ports:
      - "80:8000"
    volumes:
      - ./src:/src      
      - ./src/static:/static
      - ./config/nginx:/etc/nginx/conf.d
    depends_on:
      - web
  web:
    build: .
    container_name: django_project_A
    command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py collectstatic --noinput && gunicorn django_project_A.wsgi -b 0.0.0.0:8000"
    volumes:
      - ./src:/src
      - ./src/static:/static
    expose:
      - "8000"

networks:
  default:
    external:
      name: nginx-proxy

=============== django_project_A nginx.conf ==================

upstream web {  
  ip_hash;
  server web:8000;
}

server {  
  location /static/ {
        autoindex on;
        alias /static/;        
    }
  location / {
        proxy_pass http://web/;
    }

  listen 8000;
  server_name site.com;
}

=============== django_project_A Dockerfile ==================

FROM python:3.5  
ENV PYTHONUNBUFFERED 1  
RUN mkdir /config  
ADD /config/requirements.txt /config/  
RUN pip install -r /config/requirements.txt  
RUN mkdir /src;  
WORKDIR /src
python docker nginx docker-compose
2个回答
0
投票

配置似乎很好,首先检查端口和连接。

从Web容器检查您是否可以在127.0.0.1:8000上telnet以及从nginx容器检查是否可以ping web。如果ping到web成功,请尝试telnet web:8000。

如果一切正常,host尝试在host:80上telnet,因为它可能是阻止传入流量的主机上的防火墙。


0
投票

“nginx-proxy docker-compose.yml”将是配置的中心,因此您可以尝试在nginx和项目A和B之间启用网络通信。您可以通过尝试类似“nginx-proxy”中的内容来实现docker-compose.yml“:

networks:
  nginx:
  name: nginx
  ipam:
    driver: default

django_project_A:
   external: true

django_project_B:
   external: true
© www.soinside.com 2019 - 2024. All rights reserved.