基于SSL的虚拟主机,带有django和mod_wsgi

时间:2012-04-19 03:13:07

标签: django apache https mod-wsgi

我有一个django Web应用程序,其中允许通过http访问某些URL,而其他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 - 未找到错误。 我有一个装饰器,可以查看是否通过http访问视图,然后重定向到URL,其中http替换为https。所以url-mapping是正确的,因为我看到重定向发生(这意味着视图被调用)但是通过https,它得到404错误。

我在网络服务器文档根目录/var/www/html/中有第三方php应用程序,可以正常使用https。不知何故,该应用程序没有遇到任何关于http或https的问题。

我尝试了以下

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

编辑:

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

1 个答案:

答案 0 :(得分:4)

你的apache2.conf中是否有“Listen 80”和“Listen 443”? This可能会有所帮助。