Nginx
收到“403 access denied”錯誤而不是提供文件(使用 django、gunicorn nginx)
收到“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
- 我遵循了所有關於如何在 Digital Ocean 上部署您的網站的精美說明
- 由於我更改了使用者並使用此新使用者 ssh 進入我的新伺服器,因此我需要替換
nginx.conf
. 預設nginx.conf
使用者是www-data
: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 .. :) 沒有更多的問題。