我正在尝试重写在 apache+WSGI(在我的本地网络内)上运行的 Django 服务器的所有请求,并将其配置为 WSGI 的 wiki,除非我为其设置了一个虚拟主机。
我想要重写请求的服务器是另一个监听端口 80 的 apache 服务器。如果我不尝试启用 SSL 连接作为所需的连接方式,我可以让它正常工作。但我需要对 Django 服务器的所有请求都使用 SSL 加密,因此我通常使用此指令来实现此目的(在我的公共 Web 服务器上):
别名 /dirname “/var/www/dirname” SSLVerifyClient 无 SSL选项+FakeBasicAuth SSLRequireSSL AuthName “物品名称” AuthType 基本版 AuthUser文件 /etc/httpd/djangoserver.passwd 需要有效用户 # 将所有请求重定向到 django.test:80 重写引擎开启 RewriteRule (.*)$ http://django.test/$1 [P]
如果我尝试从浏览器通过外部服务器加载特定页面,此配置将起作用。单击我的 django 应用程序 URL 时不起作用(尽管当我将鼠标放在上面时 URL 似乎是正确的)。
我的公共服务器尝试提供的 URL 使用 http(而不是 https ),并且我在 apache 配置中指定的目录“dirname”消失了,因此它显示未找到该页面。我认为这取决于 Django 及其 WSGI 处理程序。有人遇到过我同样的问题吗?
PS:我已经尝试修改 WSGI 脚本。我在 Fedora10 (内部) 上使用 Django 1.0.3、Apache 2.2,在公共服务器上使用 Apache 2.2。
在此先感谢您的帮助。
极好的
答案1
感谢 Graham 提供的解决方案:
<Location /dirname>
SSLVerifyClient none
SSLOptions +FakeBasicAuth
SSLRequireSSL
AuthName "name Authentication"
AuthType Basic
AuthUserFile /etc/httpd/stuff.passwd
require valid-user
RequestHeader set X-Url-Scheme https
</Location>
ProxyPass /dirname http://django.test/dirname
ProxyPassReverse /dirname http://django.test/dirname
在 django.test 上我添加了这个:
设置EnvIf X-Url-Scheme https HTTPS=1
后
WSGIScriptAlias /dirname /path_to_wsgi_script/django.wsgi