[решено] Это дубликат.Пожалуйста, посмотрите этот вопрос .
У меня есть базовый Django API, работающий в разработке, когда я запускаю с помощью команды runserver.Я возвращаю список объектов, включая URL-адрес изображения в папке мультимедиа.В процессе разработки этот URL-адрес изображения включает порт, как показано ниже.Ссылка работает нормально, когда я щелкаю ее в браузере.
"image_url": "http://0.0.0.0:1337/mediafiles/publisher/sample-image4.jpg",
В производстве (gunicorn, nginx, docker) все работает так же, за исключением того, что URL-адреса, возвращаемые API, не включают порт, поэтому ссылкисломаныКак я могу убедиться, что порт включен даже в рабочей среде?
"image_url": "http://0.0.0.0/mediafiles/publisher/sample-image4.jpg",
Я предполагаю, что это может быть проблема конфигурации nginx, поскольку она работает на сервере разработки, но я не знаю, в чем проблема.мои поиски не очень помогают.Я все еще новичок в nginx, django и docker.
settings.py
...
STATIC_URL = '/staticfiles/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_URL = '/mediafiles/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'mediafiles')
...
docker-compose.yml
version: '3.7'
services:
web:
build: ./app
command: gunicorn hello_django.wsgi:application --bind 0.0.0.0:8000
volumes:
- ./app/:/usr/src/app/
- static_volume:/usr/src/app/staticfiles
- media_volume:/usr/src/app/mediafiles
ports:
- "8000"
env_file: ./app/.env
environment:
- DB_ENGINE=django.db.backends.postgresql
- DB_USER
- DB_PASSWORD
- DB_HOST=db
- DB_PORT=5432
- DATABASE=postgres
depends_on:
- db
networks:
- backend
nginx:
build: ./nginx
volumes:
- static_volume:/usr/src/app/staticfiles
- media_volume:/usr/src/app/mediafiles
ports:
- "1337:80"
depends_on:
- web
networks:
- backend
networks:
backend:
driver: bridge
volumes:
postgres_data:
static_volume:
media_volume:
nginx.conf
upstream hello_django {
server web:8000;
}
server {
listen 80;
location / {
proxy_pass http://hello_django;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location /staticfiles/ {
alias /usr/src/app/staticfiles/;
}
location /mediafiles/ {
alias /usr/src/app/mediafiles/;
}
location /favicon.ico {
access_log off;
log_not_found off;
}
}