繁体   English   中英

Nginx 在 Django 应用程序上使用 Gunicorn 重定向无法正常工作

[英]Nginx redirect with Gunicorn on Django app not working properly

我开发了一个简单的 Django Web 应用程序,但目前正在努力设置 nginx 以正确提供静态文件。

该应用程序在端口8000上与 Gunicorn 一起正常运行。 我正在尝试通过访问端口8080添加静态文件。

不幸的是,在端口8080上发出请求后,我收到以下超时消息:

nginx_1  | 2020/09/02 12:16:56 [error] 27#27: *5 upstream prematurely closed connection while reading response header from upstream, client: 172.18.0.1, server: , request: "GET /admin/ HTTP/1.1", upstream: "uwsgi://172.18.0.4:8000", host: "0.0.0.0:8080"

我相信错误来自server: ,上面错误消息的一部分,但似乎无法弄清楚如何实际解决它。

这是我的 nginx default.conf文件:

server {
    listen 8080;

    location /static {
        autoindex off;
        alias /vol/static;
    }

    location / {
        uwsgi_pass app:8000;
        proxy_request_buffering off;
        proxy_buffering off;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        include /etc/nginx/uwsgi_params;
    }
}

这是我的 nginx 映像的Dockerfile

FROM nginxinc/nginx-unprivileged:1-alpine

COPY /docker/prod/nginx/uwsgi_params /etc/nginx/uwsgi_params

USER root

RUN mkdir -p /vol/static
RUN chmod 755 /vol/static

USER nginx

这是我docker-compose.yml

version: "3"
services:
  app:
    build:
      context: .
      dockerfile: docker/prod/python/Dockerfile
    ports:
      - 8000:8000
    volumes:
      - .:/workspace:cached
      - static_data:/vol/web
    working_dir: /workspace/src/
    environment:
      - DJANGO_SETTINGS_MODULE=config.settings.production
    env_file:
      - ./src/.env
    command: sh -c "python manage.py migrate && python manage.py init_db && python manage.py collectstatic --noinput && gunicorn --preload --bind 0.0.0.0:8000 --log-level debug -w 4 config.wsgi"

  # Serving static files with nginx
  nginx:
    build:
      context: .
      dockerfile: docker/prod/nginx/Dockerfile
    volumes:
      - static_data:/vol/static
      - ./docker/prod/nginx/default.conf:/etc/nginx/conf.d/default.conf
    ports:
      - 8080:8080
    depends_on:
      - app

volumes:
  pgdata:
  static_data:
  

任何帮助将不胜感激。 我在这上面花了“很长时间”:D

我知道这不是这个问题的正确答案,但我会把它留在这里,以防有人遇到同样的问题。

我最终完全放弃了 nginx,只使用whitenoise来为我的静态文件提供服务。 配置简单 10 倍,结果似乎相同。 可能在某些情况下,一种比另一种更好,但对我而言,它效果很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM