[英]Serve media files from outside the Django-project-folder with Nginx
我正在嘗試使用 Nginx 服務器為我的 Django 項目提供生產(而非開發)媒體文件。 媒體文件不在 django 文件夾中。
文件夾結構如下:
|- django_user
| |- media
| |- Myproject
| |- static
| |- myproject
| |- settings.py
Nginx 服務器:
upstream websocket{
server 127.0.0.1:6379;
}
server {
server_name myproject.com;
client_max_body_size 5M;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/django_user/Myproject;
}
location /media/ {
root /home/django_user/media;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/myproject.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/myproject.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
location /ws {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
if ($host = myproject.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name myproject.com
return 404; # managed by Certbot
}
這是我的settings.py的一部分:
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
MEDIA_ROOT = '/home/django_user/media'
MEDIA_URL = '/media/'
將文件保存在媒體文件夾中。 我已經設置了一個像這樣的圖像字段:
myicon = models.ImageField(default="static/images/default_icon.png" , blank=True, upload_to="images/")
我檢查過它並且圖像(例如test.png)正確保存在/home/django_user/media/images 中。 我的問題是媒體文件夾中的圖像無法顯示在我的網站 (myproject.com/images/test.png) 上,它總是顯示給我:
Not Found
The requested resource was not found on this server.
我已經完成了“manage.py collectstatic” ,並且正確加載了 static 個文件。 僅找不到媒體文件。
我還嘗試了我的 nginx-server 的以下變體,但都沒有成功:
location /media/ {
root /home/django_user;
}
location /media {
root /home/django_user/media/;
}
location /media {
root /home/django_user/;
}
location /media/ {
alias /home/django_user/media/;
}
你能幫我解決這個問題嗎? 我在這里錯過了什么或者我的錯誤在哪里?
嘗試 別名方法:
location /media/ {
alias /home/django_user/media/;
}
我認為您正在嘗試使用錯誤的 URL。
如果你定義:
MEDIA_URL = '/media/
和location /media/
然后 URL 應該是myproject.com/media/images/test.png
而不是myproject.com/images/test.png
在兩種情況下(開發和生產)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.