dot*_*dot 8 django nginx gunicorn docker docker-compose
我正在尝试让 django (在 Gunicorn 上)和 nginx 与 docker 一起运行。Bad Request (400)不幸的是,我运行后不断收到错误docker-compose up -d --build。帮助。
我尝试更改目录、目录名称、卷、网络和公开端口,但无济于事。我还尝试server_name在我的nginx.conf文件中添加和删除。
在settings.py我有:
DEBUG = False\n\nALLOWED_HOSTS = [\'127.0.0.1\', \'localhost\']\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的docker-compose.yml文件:
version: \'3.3\'\n\nservices:\n web:\n build: ./app\n command: gunicorn my_server.wsgi:application --bind 0.0.0.0:8000\n volumes:\n - ./app/:/usr/src/app/\n expose:\n - 8000\n environment:\n - DATABASE=${DATABASE}\n - SECRET_KEY=${SECRET}\n - SQL_DATABASE=${POSTGRES_USER}\n - SQL_ENGINE=django.db.backends.postgresql\n - SQL_HOST=${POSTGRES_HOST}\n - SQL_PASSWORD=${POSTGRES_PASSWORD}\n - SQL_PORT=${POSTGRES_PORT}\n - SQL_USER=${POSTGRES_USER}\n - SU_NAME=${SU_NAME}\n - SU_EMAIL=${SU_EMAIL}\n - SU_PASSWORD=${SU_PASSWORD}\n depends_on:\n - db\n logging:\n driver: "json-file"\n options:\n max-size: "100k"\n max-file: "20"\n\n db:\n image: postgres:11.2-alpine\n volumes:\n - postgres_data:/var/lib/postgresql/data/\n environment:\n - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}\n - POSTGRES_USER=${POSTGRES_USER}\n logging:\n driver: "json-file"\n options:\n max-size: "100k"\n max-file: "20"\n\n nginx:\n build: ./nginx\n restart: unless-stopped\n volumes:\n - static_volume:/usr/src/app/assets\n ports:\n - 80:80\n depends_on:\n - web\n logging:\n driver: "json-file"\n options:\n max-size: "100k"\n max-file: "20"\n\nvolumes:\n static_volume:\n postgres_data:\n external: true\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的nginx.conf文件:
upstream my_server {\n server web:8000;\n}\n\nserver {\n\n listen 80;\n\n location / {\n proxy_pass http://my_server;\n proxy_set_header Host $http_host;\n proxy_set_header Host $host;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_redirect off;\n }\n\n location /assets/ {\n alias /usr/src/app/assets;\n }\n\n location /robots.txt {\n alias /var/www/html/robots.txt;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n在我的 django Dockerfile 中,我运行makemigrations并migrate确认数据库表已创建。
我希望访问localhost或127.0.0.1查看那里提供的我的网站。相反,我收到此错误:Bad Request (400)。
当我跑步时docker ps我得到:
version: \'3.3\'\n\nservices:\n web:\n build: ./app\n command: gunicorn my_server.wsgi:application --bind 0.0.0.0:8000\n volumes:\n - ./app/:/usr/src/app/\n expose:\n - 8000\n environment:\n - DATABASE=${DATABASE}\n - SECRET_KEY=${SECRET}\n - SQL_DATABASE=${POSTGRES_USER}\n - SQL_ENGINE=django.db.backends.postgresql\n - SQL_HOST=${POSTGRES_HOST}\n - SQL_PASSWORD=${POSTGRES_PASSWORD}\n - SQL_PORT=${POSTGRES_PORT}\n - SQL_USER=${POSTGRES_USER}\n - SU_NAME=${SU_NAME}\n - SU_EMAIL=${SU_EMAIL}\n - SU_PASSWORD=${SU_PASSWORD}\n depends_on:\n - db\n logging:\n driver: "json-file"\n options:\n max-size: "100k"\n max-file: "20"\n\n db:\n image: postgres:11.2-alpine\n volumes:\n - postgres_data:/var/lib/postgresql/data/\n environment:\n - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}\n - POSTGRES_USER=${POSTGRES_USER}\n logging:\n driver: "json-file"\n options:\n max-size: "100k"\n max-file: "20"\n\n nginx:\n build: ./nginx\n restart: unless-stopped\n volumes:\n - static_volume:/usr/src/app/assets\n ports:\n - 80:80\n depends_on:\n - web\n logging:\n driver: "json-file"\n options:\n max-size: "100k"\n max-file: "20"\n\nvolumes:\n static_volume:\n postgres_data:\n external: true\nRun Code Online (Sandbox Code Playgroud)\n\n当我跑步时,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" "-"\n172.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" "-"\nRun Code Online (Sandbox Code Playgroud)\n
可能您需要添加my_server到允许的主机(与 NGINX 配置中的上游相同):
ALLOWED_HOSTS = ['my_server']
Run Code Online (Sandbox Code Playgroud)
在尝试实施 upinder kumar 的解决方案时,我偶然发现了该解决方案。我会在这里为将来遇到这个问题的其他人添加:
两者nginx.conf不能兼得
proxy_set_header Host $http_host;
Run Code Online (Sandbox Code Playgroud)
和
proxy_set_header Host $host;
Run Code Online (Sandbox Code Playgroud)
删除其中任何一个都可以解决问题。
| 归档时间: |
|
| 查看次数: |
4997 次 |
| 最近记录: |