如何使用Cloudflare的免费SSL在Apache + mod_wsgi堆栈上强制我的Django应用程序上的https?

时间:2015-07-24 10:40:15

标签: django apache ssl mod-wsgi cloudflare

我想在 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工作方式。 how Cloudflare's free SSL works

我没有获得SSL证书,我尝试使用灵活SSL 来使用免费SSL。 即。从用户到Cloudflare DNS的连接将是 https ,Cloudflare和我的服务器之间的连接将是 http

注意:目前我使用 django-sslify 等中间件。但使用它将有助于任何其他方式。我也可以。

1 个答案:

答案 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>