docker错误请求时的django+nginx(400)

docker错误请求时的django+nginx(400),django,docker,nginx,docker-compose,gunicorn,Django,Docker,Nginx,Docker Compose,Gunicorn,我正试着让django在gunicorn和nginx上与docker一起运行。不幸的是,在运行docker compose up-d-build之后,我一直收到错误的Request 400错误。救命啊 我尝试过更改目录、目录名、卷、网络和公开的端口,但都无济于事。我还尝试在nginx.conf文件中添加和删除服务器名称 在settings.py中,我有: 调试=错误 允许的_HOSTS=['127.0.0.1','localhost'] 这是我的docker-compose.yml文件: 这是我

我正试着让django在gunicorn和nginx上与docker一起运行。不幸的是,在运行docker compose up-d-build之后,我一直收到错误的Request 400错误。救命啊

我尝试过更改目录、目录名、卷、网络和公开的端口,但都无济于事。我还尝试在nginx.conf文件中添加和删除服务器名称

在settings.py中,我有:

调试=错误 允许的_HOSTS=['127.0.0.1','localhost'] 这是我的docker-compose.yml文件:

这是我的nginx.conf文件:

在django的Dockerfile中,我运行makemigrations和migrate,并确认已创建数据库表

我希望访问localhost或127.0.0.1,并在那里看到我的网站。相反,我得到了这个错误:错误的请求400

当我运行docker ps时,我得到:

容器ID映像命令已创建状态端口名称 2dbc6ff7be78 my_server_nginx nginx-g’4分钟前的守护进程启动4分钟0.0.0.0:80->80/tcp my_server_nginx_1 a6173e017c93 my_server_web/usr/src/app/entryp…4分钟前启动4分钟8000/tcp my_server_web_1 918E7BDA298 postgres:11.2-alpine docker entrypoint.s…4分钟前启动4分钟5432/tcp my_server_db_1 当我运行docker logs my_server_nginx_1时,我得到如下行:

172.18.0.1 - - [08/May/2019:22:25:07 +0000] "GET / HTTP/1.1" 400 37 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36" "-"
172.18.0.1 - - [08/May/2019:22:25:07 +0000] "GET /favicon.ico HTTP/1.1" 400 37 "http://localhost/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36" "-"
可能需要将my_服务器添加到允许的主机名中,作为NGINX配置中的上游:

ALLOWED_HOSTS = ['my_server']
可能需要将my_服务器添加到允许的主机名中,作为NGINX配置中的上游:

ALLOWED_HOSTS = ['my_server']
它将创建文件名source.sock,只需在nginx虚拟主机中配置此sock文件即可

nginx构型
    server {
    server_name example.com;
    listen 80;
    access_log /var/www/html//source/access.log;
    error_log /var/www/html/source/error.log;
    include /etc/nginx/default.d/*.conf;

    location /static/ {
            root /var/www/html/source/run;
    }


    location / {
            proxy_pass http://unix:/var/www/html/source/source.sock;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $host;
       }
  }
它将创建文件名source.sock,只需在nginx虚拟主机中配置此sock文件即可

nginx构型
    server {
    server_name example.com;
    listen 80;
    access_log /var/www/html//source/access.log;
    error_log /var/www/html/source/error.log;
    include /etc/nginx/default.d/*.conf;

    location /static/ {
            root /var/www/html/source/run;
    }


    location / {
            proxy_pass http://unix:/var/www/html/source/source.sock;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $host;
       }
  }

在尝试实施upinder kumar的解决方案时,我偶然发现了这个解决方案。我将在这里为今后面临这一问题的任何其他人补充:

nginx.conf不能同时具有这两个属性

proxy_set_header    Host                $http_host;


删除其中一个解决了问题。

在尝试实现upinder kumar的解决方案时,我偶然发现了该解决方案。我将在这里为今后面临这一问题的任何其他人补充:

nginx.conf不能同时具有这两个属性

proxy_set_header    Host                $http_host;


删除其中一个解决了问题。

您需要检查docker中的django日志。您可以这样做:docker exec-ti bash您需要检查docker中的django日志。你可以这样做:docker exec-ti bashI不知道为什么这是真的。如果有人可以编辑这个解决方案,并给出一个理由,那将是令人惊讶的:我不知道为什么这是真的。如果有人可以编辑这个解决方案,并给出一个令人惊讶的理由:D
proxy_set_header    Host                $host;