使用apache2在https上运行django admin

时间:2010-10-14 17:31:07

标签: django http https apache2 admin

我有一个运行在apache 2.2.14上的django Web应用程序,我想通过https运行管理应用程序。

在阅读了有关使用代理,编写中间件,运行替代wsgi脚本的大量讨论之后,#httpd中的人们开始拯救我。解决方案非常简单,我很惊讶我没有在网上找到它,所以我很想知道我是否做了一些明显的假设或错误。

一个复杂因素是我还希望通过https在网站上运行我的一个django应用程序,这就是/ checkout上的所有内容。

基本上,如果用户在http上请求以/ admin或/ checkout开头的URI,则会将其重定向到该URI,但需要重定向到https。相反,如果用户在https上请求不以/ admin或/ checkout开头的URI,则会将其重定向到该URI,但是会重定向到http。

解决此问题的关键是在我的VirtualHost配置中使用Redirect和RedirectMatch指令。

<VirtualHost *:80>

    ... host config stuff ...

    Redirect /admin https://www.mywebsite.com/admin
    Redirect /checkout https://www.mywebsite.com/checkout

</VirtualHost>
<VirtualHost *:443>

    ... ssl host config stuff ...

    RedirectMatch ^(/(?!admin|checkout).*) http://www.mywebsite.com$1

</VirtualHost>

3 个答案:

答案 0 :(得分:3)

另一种方法是使用@secure_required decorator。这将自动重写请求的网址并重定向到网址的https://...版本。然后,您不必在*:80配置中进行重定向。如果您希望其他流量通过正常的http流量,则可能仍需要*:443配置用于性能目的。

答案 1 :(得分:1)

我尝试了你的解决方案,但遇到了几个问题。首先,管理站点上的格式消失了,就好像它找不到管理静态文件一样。其次,如果我试图通过https访问非管理员站点,浏览器将找不到它并将我重定向到Yahoo搜索。奇怪的是,如果我编辑雅虎搜索URL以消除除正确URL(减去http://)之外的所有文本,它将继续搜索yahoo以查找我的网站。但是,重新输入完​​全相同的URL会将我发送到我的网站。

我只需删除

即可解决所有这些问题
RedirectMatch ^(/(?!admin|checkout).*) http://www.mywebsite.com$1

指令。

我应该提一下,我的网站上没有/ checkout部分,我只是想保护/管理员。 ...是的,我确实将我的网址替换为“mywebsite.com”

答案 2 :(得分:0)

您所描述的内容应该有效,但如果您需要更改哪些路径不是HTTPS,则将来可能会出现问题。因为此方法需要正确修改Apache配置文件的能力,这意味着您在循环中需要新手。拧紧配置文件,您的网站可以在眨眼间出现500错误。

我们选择了一个简单的文本文件,其中包含必须为HTTPS的路径列表。项目中的任何人都可以对其进行编辑,并在加载时检查其是否正确。我们在中间件中处理任何需要重定向到HTTPS的重定向,它似乎工作得很好。如果您运行其他而不是Apache。

,此方法也可以使用