【问题标题】:SSL based virtual host with django and mod_wsgi带有 django 和 mod_wsgi 的基于 SSL 的虚拟主机
【发布时间】:2012-04-30 13:25:24
【问题描述】:

我有一个 django web 应用程序,其中一些 URL 可以通过 http 访问,而其他 URL 只能通过 http-secure。我需要在我的 apache conf 文件中设置 virtualHost/mod_wsgi 配置,以便可以通过两者访问相同的 Web 应用程序。我关注了这两个帖子

并具有以下我认为应该可以解决问题的配置。

NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin me@mail.com
    DocumentRoot /var/www/html
    ServerName www.mydomain.com

    ErrorLog server-logs/error_log
    CustomLog server-logs/access_log common

    WSGIScriptAlias /test /var/www/my_app_root/apache/django.wsgi

    <Directory /var/www/my_app_root>
      Order allow,deny
      Allow from all
    </Directory>    
</VirtualHost>

NameVirtualHost *:443
<VirtualHost *:443>
    SSLEngine On
    SSLCertificateFile /etc/httpd/conf/ssl/mykey.crt
    SSLCertificateKeyFile /etc/httpd/conf/ssl/mykey.key

    ServerAdmin me@mail.com
    DocumentRoot /var/www/html
    ServerName www.mydomain.com

    ErrorLog server-logs/error_log
    CustomLog server-logs/access_log common

    WSGIScriptAlias /test /var/www/my_app_root/apache/django.wsgi

    <Directory /var/www/my_app_root>
      Order allow,deny
      Allow from all
    </Directory>
</VirtualHost>

但是,必须通过 http 访问的 url 可以正常访问,而必须通过 https 访问的 url 会出现 404 - not found 错误。 我有一个装饰器,它查看是否正在通过 http 访问视图,然后重定向到将 http 替换为 https 的 url。所以 url-mapping 是正确的,因为我看到重定向发生(这意味着视图被调用)但是通过 https,它得到 404 错误。

我在网络服务器文档根/var/www/html/ 中有一个第 3 方 php 应用程序,它在 https 上运行良好。不知何故,该应用程序在 http 或 https 上没有遇到任何问题。

我尝试了以下

  • 尝试在两个虚拟主机中使用相同的WSGIProcessGroup 名称的守护程序模式方法,但也没有成功。
  • 我尝试添加 Listen 443 命令,apache 抱怨端口已绑定错误。

编辑:

由于您的所有 cmets,我对配置进行了更多探索,发现有一个子 conf 文件在运行时被拉入,它定义 *:443 虚拟主机(并且没有 wsgiscript 指令)。这就是Listen 443 抛出错误的原因。这也解释了 https 上 url 的 404(处理 *:443 的虚拟主机无法解析该 url)。现在我对其进行了修改,一切正常。我最初问题的 2 个堆栈溢出帖子中建议的方法是完美的并且可以正常工作。

【问题讨论】:

  • 服务器日志中是否有通过 HTTPS 的请求?您是否收到 Django 的 404 或来自 apache 的错误?什么软件在使用443端口(可以netstat查看)?
  • Apache 访问日志说尝试访问的重定向 URL 是什么?因为您在子 URL 上安装,如果您不使用正确的方式构建重定向,它可能不会重定向回相对于安装点的位置。因此,请从 Apache 访问日志中发布条目,以便确认正在请求哪些 URL,并在访问日志中查看它们的 HTTP 响应代码。

标签: django apache https mod-wsgi


【解决方案1】:

您的 apache2.conf 中是否同时提到了“Listen 80”和“Listen 443”? This 可能会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-04-22
    • 1970-01-01
    • 2014-06-21
    • 2015-03-24
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    相关资源
    最近更新 更多