簡體   English   中英

403 禁止:Nginx 不在 Django 管理面板中提供靜態信息

[英]403 Forbidden: Nginx not serving statics in Django Admin panel

設置.py

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
DEBUG = True
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'adminstatic')

mynginx.conf /etc/nginx/sites-enabled/mynginx.conf你可以確定我在sites-enabled文件夾中只有這個conf文件

server {
    listen                *:80;
    server_name           _;
    access_log            /var/log/myapp.access.log;
    error_log             /var/log/myapp.error.log;

    # Django media

   location /static/ {
     alias /root/proj/myapp/adminstatic/; #your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass    unix:/tmp/myapp.sock;
        include     /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
    }

}

在此之后,我嘗試了 collectstatic 命令python manage.py collectstatic它已成功收集了 adminstatic 文件夾中的所有靜態數據。我交叉檢查,在 adminstatic 文件夾中有一個名為admin的文件夾。 這個 admin 文件夾有 3 個文件夾,名為cssimgjs

所有這些都是我在生產機器上做的。 因此,當我嘗試通過生產的 ip 訪問本地瀏覽器上的 django 管理頁面時,管理面板正在打開但加載了任何 css/js。 我做了 F12 並在網絡選項卡中看到。 所有靜態都存在禁止錯誤。

PS:我將 uWsgi 與 nginx 一起使用。

和往常一樣,我已經看過一些 SO 主題和博客。 但這對我沒有幫助。

nginx web 進程用戶(通常是www-data )可能沒有/root/proj/myapp/adminstatic/讀取權限。 我想如果您檢查myapp.error.log您會看到權限被拒絕的消息。

您需要將您的項目移動到 nginx 進程有權讀取的文件夾中(您真的不應該從/root提供這些東西),或者您可以chown / chmod /root/proj/myapp/adminstatic/適當地給予訪問www-data

我將靜態文件移動到 /data/www 並且它起作用了。

將您的項目移動到/var/www/html/然后運行sudo chown -R www-data:www-data project-directory/記得在/etc/systemd/system/gunicorn.service/etc/nginx/sites-available/your-project.conf上編輯您的配置/etc/nginx/sites-available/your-project.conf到新位置。

然后運行

sudo systemctl daemon-reload, 
sudo systemctl restart gunicorn, 
sudo systemctl restart nginx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM