收到“403 访问被拒绝”错误而不是提供文件(使用 django、gunicorn nginx)

收到“403 访问被拒绝”错误而不是提供文件(使用 django、gunicorn nginx)

收到“403 访问被拒绝”错误而不是提供文件(使用 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"**

答案1

你应该使用root

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

而不是你的alias

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

答案2

不久前我也遇到过同样的问题。这可能是多种因素造成的。我找到了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 用户替换并解决了我的问题。

相关内容