Django + uWSGI + Nginx + SSL - 工作配置请求(强调 SSL)

Posted

技术标签:

【中文标题】Django + uWSGI + Nginx + SSL - 工作配置请求(强调 SSL)【英文标题】:Django + uWSGI + Nginx + SSL - request for working configuration (emphasis on SSL) 【发布时间】:2015-07-01 20:47:13 【问题描述】:

有人对这四个有有效的配置吗?

- Django
- uWSGI
- nginx
- SSL 

主要问题是如何为此正确设置SSL?我用谷歌搜索了很多,但仍然无法让它工作。我为httpunix sockets 设置了一个工作设置,但这是我所能得到的。

还有一些其他的答案贴出来,但大多是代码sn-ps,不是完整的配置。

【问题讨论】:

通常让 ssl 在 nginx 终止,然后 nginx 通过 http 与上游服务器 (uWSGI) 对话。网上有很多很多这样的例子,digitalocean.com/community/tutorials/…就是其中之一 @dm03514 我了解https 将终止于面向公众的nginx reverse proxy server。教程链接很有帮助。 location / ... proxy args 块是否适用于 uWSGI 是否需要用 uwsgi 参数替换? 【参考方案1】:
server 
    listen          80;
    server_name     example.com;
    rewrite ^/(.*)  https://example.com/$1 permanent;


server 
    listen          443 ssl;
    server_name     example.com;
    access_log      /var/log/nginx/example.com_access.log combined;
    error_log       /var/log/nginx/example.com_error.log error;

    ssl_certificate         /etc/nginx/ssl/example-unified.crt;
    ssl_certificate_key     /etc/nginx/ssl/example.key;

    location /static/ 
        alias /webapps/example/static/;
    

    location /media/ 
        alias /webapps/example/media/;
    

    location / 
        proxy_pass         http://localhost:8000/;
        proxy_redirect     off;

        proxy_set_header   Host              $http_host;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
    


这是基本的 nginx 配置,将与 SSL 一起使用,并将请求转发到运行在端口 8000 上的 uwsgi(如果需要,您可以将其更改为套接字)。

有关高级 SSL 设置,请查看THIS。

【讨论】:

我无法让它工作。你之前为uwsgi + nginx + django + ssl做过这个设置吗??如果是这样,您能否提供一个示例 uwsgi.ini 文件?非常感谢您的帮助。谢谢 在我们公司,我们使用 uwsgi 来运行 Django,但是很遗憾我不能在这里分享模板。我只能告诉你,nginx 模板与这个几乎相同(这是我个人的)。如果您是否使用 https,uwsgi 没有区别,所以问题应该出在其他地方。我个人更喜欢 Gunicorn 来运行 Django(在我们公司,我们只使用 uwsgi,因为最新版本支持 Web 套接字)。你有什么理由使用 uwsgi 吗?如果你愿意,我可以给你运行 Gunicorn 的模板。 是的,我需要使用uwsgi 来为我当前的项目使用网络套接字。我过去使用过 Gunicorn,并且有一个工作版本。感谢您的帮助,我希望在第二天左右解决这个问题。 您的配置完全正确。我没有为ssl 开放端口443/tcp,所以是ufw 阻止了请求。谢谢。 不客气!太好了,你解决了你的问题。【参考方案2】:

我是 nginx、uwsgi 和 ssl 的新手。这里分享我的测试nginx和uwsgi配置。

基本上,部署Django只支持SSL/HTTPS有四个步骤。

    设置 SSL 证书 使用openssl生成server.crt和server.key

    openssl req -new -x509 -nodes -out server.crt -keyout server.key

    Django项目下配置nginx.conf和uwsgi.ini 设置nginx.conf(抱歉,文本块的布局很奇怪,所以我在这里插入图片。) 从 /etc/nginx/sites-enabled 到这个文件的符号链接,所以 nginx 可以看到它

    sudo ln -s /path/to/django/example_nginx.conf /etc/nginx/sites-enabled/

    在django项目下配置uwsgi.ini

    配置设置.py

    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
    SESSION_COOKIE_SECURE = True
    CSRF_COOKIE_SECURE = True
    SECURE_SSL_REDIRECT = True
    

    重启nginx和uwsgi

    重启nginx

    sudo /etc/init.d/nginx 重启

    运行uwsgi

    uwsgi --ini /path/to/django/example_uwsgi.ini

【讨论】:

以上是关于Django + uWSGI + Nginx + SSL - 工作配置请求(强调 SSL)的主要内容,如果未能解决你的问题,请参考以下文章

通过 Nginx 的 uwsgi + django - uwsgi 设置/生成?

转载nginx+uwsgi+django

Django+Nginx+uWSGI = 504 网关超时

uWSGI + Nginx + Django 部署

Django + Uwsgi + Nginx 实现生产环境部署

Django + Uwsgi + Nginx 实现生产环境部署