【问题标题】:Django + uWSGI + Nginx + SSL - request for working configuration (emphasis on SSL)Django + uWSGI + Nginx + SSL - 工作配置请求(强调 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 参数替换?

标签: django ssl nginx 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有四个步骤。

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

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

  2. 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
  3. 配置设置.py

    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
    SESSION_COOKIE_SECURE = True
    CSRF_COOKIE_SECURE = True
    SECURE_SSL_REDIRECT = True
    
  4. 重启nginx和uwsgi

    • 重启nginx

      sudo /etc/init.d/nginx 重启

    • 运行uwsgi

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

【讨论】:

    猜你喜欢
    • 2011-10-10
    • 1970-01-01
    • 2019-07-29
    • 2016-03-05
    • 2015-02-17
    • 1970-01-01
    • 2020-05-06
    • 2017-08-07
    • 2018-09-19
    相关资源
    最近更新 更多