我想在 Apache + mod_wsgi 堆栈上运行的Django应用程序中使用 Cloudflare 提供的免费SSL (DNS)服务。我可以找到 Nginx + uWSGI 堆栈的设置示例,但到目前为止还没有找到Apache + mod_wsgi堆栈的设置示例。我在这里按照这个答案https://stackoverflow.com/a/27650503/2051292。但我无法将解决方法从Nginx配置转换为Apache / mod_wsgi。我面临的问题很少,
即使我使用https访问网页,点击任何内部链接或提交登录/注册表单只能访问http页面。 (我实际上希望所有链接转到https页面)
在网页表单上(登录,注册)我收到CSRF失败403 Access Forbidden错误。我在https页面登录,但在验证后重定向到 CSRF 错误的http页面。
有时调整配置会导致重定向循环。
想知道使用cloudflare免费SSL和Apache + mod_wsgi堆栈的工作配置以及用于设置的Django设置
编辑:如果您不知道,这就是Cloudflare的免费SSL工作方式。
我没有获得SSL证书,我尝试使用灵活SSL 来使用免费SSL。 即。从用户到Cloudflare DNS的连接将是 https ,Cloudflare和我的服务器之间的连接将是 http 。
注意:目前我不使用 django-sslify 等中间件。但使用它将有助于任何其他方式。我也可以。
答案 0 :(得分:0)
虽然我不知道使用Cloudflare的具体细节,但是一旦你拥有了相应的证书,它应该是相同的Apache配置。中找到了另一个答案中提到的代理设置。这是我用于在CentOS下使用mod_wsgi和mod_ssl托管Django的Apache配置示例。在此配置下,我们甚至不会收听端口80.这假设您的网站位于https://example.com/mysite
,并且已部署到用户/var/www/html/mysite
下的mysiteuser
一个名为mysitevenv
的虚拟人物:
LoadModule wsgi_module modules/mod_wsgi.so
LoadModule ssl_module modules/mod_ssl.so
WSGISocketPrefix /var/run/wsgi
NameVirtualHost *:443
Listen 443
<VirtualHost *:443>
ServerName example.com
ErrorLog /home/mysiteuser/apache_errors.log
WSGIDaemonProcess mysite-https python-home=/home/mysiteuser/.virtualenvs/mysitevenv
WSGIScriptAlias /mysite /var/www/html/mysite/mysite/wsgi.py process-group=mysite-https application-group=mysite-https
WSGIProcessGroup so-https
Alias /mysite/static/ /var/www/html/mysite/static/
SSLENGINE on
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLProtocol all -SSLv2
</VirtualHost>