Nginx

收到“403 access denied”錯誤而不是提供文件(使用 django、gunicorn nginx)

  • May 28, 2021

收到“403 access denied”錯誤而不是提供文件(使用 django、gunicorn nginx)

我正在嘗試使用 nginx 從 django 提供私有文件​​。對於 X-Access-Redirect 設置,我遵循以下指南

http://www.chicagodjango.com/blog/permission-based-file-serving/

這是我的站點配置文件(/etc/nginx/site-available/sitename):

server {
   listen 80;
   listen 443 default_server ssl;

   server_name localhost;

   client_max_body_size    50M;

   ssl_certificate /home/user/site.crt;
   ssl_certificate_key /home/user/site.key;

   access_log /home/user/nginx/access.log;
   error_log  /home/user/nginx/error.log;

   location / {
          access_log /home/user/gunicorn/access.log;
          error_log /home/user/gunicorn/error.log;
          alias /path_to/app;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host $http_host;
          proxy_redirect off;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Scheme $scheme;
          proxy_pass http://127.0.0.1:8000;
          proxy_connect_timeout 100s;
          proxy_send_timeout 100s;
          proxy_read_timeout 100s;
   }

   location /protected/ {
           internal;
           alias /home/user/protected;
   }
}

然後我嘗試在我的 django 視圖中使用以下內容來測試下載:

response = HttpResponse()
response['Content-Type'] = "application/zip"
response['X-Accel-Redirect'] = '/protected/test.zip'
return response

但我得到的不是文件下載:

**403 禁止

nginx/1.1.19**

**請注意:**我已經從配置文件中刪除了所有個人數據,所以如果有任何與我的錯誤無關的明顯錯誤,這可能就是原因。

我的 nginx 錯誤日誌給了我以下資訊:

**2012/09/18 13:44:36 [error] 23705#0: *44 directory index of "/home/user/protected/" is forbidden, client: 80.221.147.225, server: localhost, request: "GET /icbdazzled/tmpdir/ HTTP/1.1", host: "www.icb.fi"**

你應該使用root

location /protected/ {
       internal;
       root /home/user;
}

而不是你的alias

location /protected/ {
       internal;
       alias /home/user/protected;
}

我不久前有同樣的問題。這可能是多種因素的組合。403 access denied我找到瞭如何通過替換文件中的使用者來修復nginx.conf

  • 我使用 Digital Ocean 將我的網站部署在 ubuntu 伺服器上。
  • 我在我的新 ubuntu 伺服器上創建了一個新使用者並授予管理員權限
   adduser newuser

   usermod -aG sudo newuser 
  • 我更新了我的新伺服器並安裝了一些軟體包
   sudo apt update

   sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl 
   user www-data;

   worker_processes auto;

   pid /run/nginx.pid;

然後我用我的 sudo 使用者替換並解決了我的問題。😀

   user newuser;

   worker_processes auto;

   pid /run/nginx.pid;
  • 然後我重新啟動 nginx、gunicorn 和 postgresql(即使最後一個也不是真的需要)
   sudo systemctl restart nginx 

   sudo systemctl restart gunicorn

   sudo systemctl restart postgresql

和tada .. :) 沒有更多的問題。

引用自:https://serverfault.com/questions/429444