在 Apache+WSGI 和 apache SSL 代理上运行的 Django

在 Apache+WSGI 和 apache SSL 代理上运行的 Django

我正在尝试重写在 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

相关内容