使用HTTPS时,Django + uWSGI + Nginx返回403 Forbidden

时间:2015-05-18 04:36:42

标签: django ssl nginx uwsgi

我正在使用Django 1.7.7和Django REST框架编写RESTful服务器应用程序。当我在Django测试服务器上运行它时,应用程序一直运行良好。

现在,我将它部署到运行Nginx和uWSGI的AWS上的登台服务器。服务器似乎运行正常,但调用POST方法会导致“403 Forbidden”响应。如果我禁用HTTPS,则调用工作正常,因此它与HTTPS有关。

这是我网站的Nginx配置文件:

server {
    listen 443 ssl;
    charset utf-8;
    server_name <HERE'S MY SERVER ADDRESS>;

    ssl on;
    ssl_certificate /etc/nginx/ssl/myapp.crt;
    ssl_certificate_key /etc/nginx/ssl/myapp.key;
    ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL';
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_session_cache shared:SSL:10m;
    ssl_prefer_server_ciphers on;

    add_header Strict-Transport-Security max-age=63072000;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;

    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:3031;
        uwsgi_param UWSGI_SCHEME https;
        uwsgi_param UWSGI_SCRIPT myapp.wsgi;
        uwsgi_param REQUEST_URI $request_uri;
        uwsgi_param DOCUMENT_ROOT $document_root;
        uwsgi_param SERVER_PROTOCOL $server_protocol;
        uwsgi_param HTTPS $https if_not_empty;
    }
}

重申一下,如果我将listen 443 ssl更改为listen 80 default_server并将ssl on更改为ssl off,则POST方法可以正常工作。

这是uWSGI配置文件:

[uwsgi]
socket = 127.0.0.1:3031
chdir = /web/myapp/source/myapp
module = myapp.wsgi

我怀疑有一件事是CSRF标头在它找到Django的CSRF中间件之前被剥离了,但我不知道如何验证这一点。它也可能是完全不同的东西。

0 个答案:

没有答案