【发布时间】:2015-07-24 10:40:15
【问题描述】:
我想在 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 Failed 403 Access Forbidden 错误。我在 https 页面登录,但在验证后重定向到带有 CSRF 错误的 http 页面。
有时调整配置会导致重定向循环。
想知道在 Apache + mod_wsgi 堆栈中使用 cloudflare free SSL 的工作配置以及设置的 Django 设置
编辑:如果您不知道,这就是 Cloudflare 的免费 SSL 的工作原理。
我没有 SSL 证书,我正在尝试通过 Flexible SSL 来使用免费的 SSL。 即用户到 Cloudflare DNS 的连接将是 https,Cloudflare 和我的服务器之间的连接将是 http。
注意:目前我不使用任何像 django-sslify 这样的中间件。但是使用它会以任何其他方式提供帮助。我也可以。
【问题讨论】:
-
您是否尝试过使用 PageRules 通过 CloudFlare 强制 https://? PageRules 中有一个始终使用 https:// 选项。 PageRules相关信息:support.cloudflare.com/hc/en-us/articles/…
-
是的,使用 PageRules 强制“https”会导致无限重定向循环,或者如果从 Django 中移除强制,则会导致“CSRF 令牌失败”,如我上面指定的那样。在 NginX 中,我需要传递这三个 HTTP 标头以避免这些错误。
proxy_set_header X-Scheme $scheme; proxy_set_header X-Forwarded-Protocol $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host;但我无法做到这一点,因为我不确定如何在 Apache 中做到这一点。 -
好的,您是直接在您的服务器上进行重定向然后还使用 PageRules 吗?我可以看到这将如何导致问题。
标签: django apache ssl mod-wsgi cloudflare