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
?我用谷歌搜索了很多,但仍然无法让它工作。我为http
和unix 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
Django项目下配置nginx.conf和uwsgi.ini 设置nginx.conf(抱歉,文本块的布局很奇怪,所以我在这里插入图片。) 从 /etc/nginx/sites-enabled 到这个文件的符号链接,所以 nginx 可以看到它openssl req -new -x509 -nodes -out server.crt -keyout server.key
在django项目下配置uwsgi.inisudo ln -s /path/to/django/example_nginx.conf /etc/nginx/sites-enabled/
配置设置.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运行uwsgisudo /etc/init.d/nginx 重启
uwsgi --ini /path/to/django/example_uwsgi.ini
【讨论】:
以上是关于Django + uWSGI + Nginx + SSL - 工作配置请求(强调 SSL)的主要内容,如果未能解决你的问题,请参考以下文章
通过 Nginx 的 uwsgi + django - uwsgi 设置/生成?