【问题标题】:Django, DRF, Docker, nginx - Server Configuration - Base URL for mediafilesDjango、DRF、Docker、nginx - 服务器配置 - 媒体文件的基本 URL
【发布时间】:2021-11-29 11:51:10
【问题描述】:

我正在尝试设置我的 Django Rest Framework 应用程序。不幸的是,我仍然无法正确获取媒体文件的 url。

我尝试将此答案中的行添加到我的 nginx 配置中,结果是“错误请求 (400)”:Django Rest framework swagger base url

应用程序正在 my-domain.com 上运行。

https://my-domain.com/user/

{
    "count": 1,
    "next": null,
    "previous": null,
    "results": [
        {
            "id": "512e0f9f-f08a-4a2d-8e1d-b933a16c0a1f",
            "date_joined": "2021-10-10T11:41:05.077828Z",
            "name": "Maxine Mustermann",
            "user_picture": "**http://127.0.0.1:8337**/mediafiles/images/usr1.jpeg"
        }
    ]
}

预期https://my-domain.com/mediafiles/images/usr1.jpeg(虽然图片可以通过这个url访问)

返回http://127.0.0.1:8337/mediafiles/images/usr1.jpeg

docker-compose 文件:

version: "3.8"

services:
  db:
    image: postgres:13-alpine
    volumes:
      - postgres_data_staging:/var/lib/postgresql/data/
    env_file:
      - ./.env.staging.db
    expose:
      - 5432

  web:
    build:
      context: ./api
      dockerfile: Dockerfile.staging
    command: gunicorn config.wsgi:application --workers 3 --bind 0.0.0.0:8000
    volumes:
      - static_volume_staging:/home/api/web/staticfiles
      - media_volume_staging:/home/api/web/mediafiles
    expose:
      - 8000
    env_file:
      - ./.env.staging
    depends_on:
      - db

  nginx:
    build: ./nginx
    volumes:
      - static_volume_staging:/home/api/web/staticfiles
      - media_volume_staging:/home/api/web/mediafiles
    ports:
      - 8337:80
    depends_on:
      - web

volumes:
  postgres_data_staging:
  static_volume_staging:
  media_volume_staging:

nginx.conf:

upstream ae_backend {
    server web:8000;
}

server {
    listen 80;
    client_max_body_size 75M;
    server_name $DOMAIN www.$DOMAIN;

    location / {
        proxy_pass http://ae_backend;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }

    location /staticfiles/ {
        alias /home/api/web/staticfiles/;
    }

    location /mediafiles/ {
        alias /home/api/web/mediafiles/;
    }
}

服务器配置nginx/sites-enabled/my-api:

server {

    server_name my-domain.com;
    location = /favicon.ico { access_log off; log_not_found off; }
    # add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'Authorization';

    location / {
        proxy_pass http://127.0.0.1:8337;
    }

    listen [::]:443 ssl; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/my-domain.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/my-domain.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 = my-domain.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    listen [::]:80;

    server_name my-domain.com;
    return 404; # managed by Certbot

    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'Authorization';
}

任何帮助和参考将不胜感激。

谢谢!!

问候,

弗洛里安

顺便说一句:这是我在 stackoverflow 上的第一篇文章。请善待;-)

【问题讨论】:

    标签: django docker nginx django-rest-framework gunicorn


    【解决方案1】:

    我将此部分编辑到我的服务器 nginx 配置中:

    location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass http://127.0.0.1:8337;
        }
    

    并确保 my-domain.com 列在“ALLOWED_HOSTS”(settings.py) 中。

    【讨论】:

      猜你喜欢
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      相关资源
      最近更新 更多