Обслуживание медиаконтента с помощью Django и Nginx

Я создаю DRF приложение, которое размещается на удаленном сервере. У меня есть PostgreSQL и Django Rest Framework, работающие внутри Docker контейнеров, и Nginx непосредственно на хосте.

Теперь, когда я делаю запрос к https://example.com/path/to/file - я получаю изображение, обслуживаемое Nginx правильно. Но моя проблема в том, что когда Django возвращает мне JSON объект с данными, поле image_url (Django's ImageField - путь к файлу) равно http://localhost:6500/path/to/file Этот 6500 порт и localhost генерируются Docker. Вместо этого я предполагал, что она будет возвращать следующее: https://example.com/path/to/file.

Вот мой Nginx файл:

server {
    server_name api.example.com www.api.example.com;
    access_log /var/log/nginx/api.example.com-access.log;
    error_log /var/log/nginx/api.example.com-error.log;

    location /media/ {
        alias /opt/site_backend_docker/Site_Backend/apps/media/;
    }


    location / {
        client_max_body_size 0;
        gzip off;
        ## https://github.com/gitlabhq/gitlabhq/issues/694
        ## Some requests take more than 30 seconds.
        proxy_read_timeout      300;
        proxy_connect_timeout   300;
        proxy_redirect          off;
        proxy_http_version 1.1;
        proxy_set_header    X-Real-IP           $remote_addr;
       listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = api.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    server_name api.example.com www.api.example.com;
    listen 80;
    return 404; # managed by Certbot

}

А мои Django настройки для медиаконтента:

MEDIA_ROOT = str(APPS_DIR / "media")
MEDIA_URL = "/media/"

Извините, если мой вопрос глупый, это мой первый опыт в развертывании. Буду очень благодарен за любую помощь.

P.S. Я знаю, что Amazon S3 и другие решения для обслуживания медиа в продакшене несравнимо лучше, но я пока использую только правильное (сам Django).

Вернуться на верх