docker错误请求时的django+nginx(400)
我正试着让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时,我得到如下行: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文件: 这是我
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;