2012-04-19 42 views
4

我有一個Django的Web應用程序,其中一些URL允許通過HTTP訪問,而其他的只能通過HTTP安全。我需要在我的apache conf文件中設置virtualHost/mod_wsgi配置,以便可以同時訪問同一個web應用程序。我跟着這2個職位基於SSL的虛擬主機與Django和mod_wsgi

,並具有以下配置我認爲應該做的伎倆。

NameVirtualHost *:80 
<VirtualHost *:80> 
    ServerAdmin [email protected] 
    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 [email protected] 
    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得到一個404 - 未找到錯誤。 我有一個裝飾器,它可以查看是否通過http訪問視圖,然後通過http將其替換爲http重定向到一個url。所以url-mapping是正確的,因爲我看到重定向發生(這意味着視圖被調用),但通過https,它會得到404錯誤。

我有一個第三方php應用程序在web服務器文檔根/var/www/html/,它可以在https上正常工作。不知何故,該應用程序不會通過http或https遇到任何問題。

我嘗試以下

  • 試圖在這兩個虛擬主機使用相同的WSGIProcessGroup名守護進程模式的做法,但也不能工作了。
  • 我試着添加Listen 443命令,而apache抱怨端口已經綁定錯誤。

編輯:

由於您的所有意見,我探索的配置多一點,發現有這是得到在其定義*運行時間拉到子的conf文件:443虛擬主機(並沒有wsgiscript指令)。這就是爲什麼Listen 443發生錯誤。這也解釋了基於https的url的404(虛擬主機處理*:443無法解析該url)。現在我修改它,一切工作正常。在我原來的問題中的2堆棧溢出帖子中提出的方法是完美的,並正常工作。

+0

您是否有通過HTTPS出現在服務器日誌中的請求?你收到Django的404或從Apache的錯誤?什麼軟件使用443端口(你可以用'netstat'查看)? – ilvar 2012-04-19 04:43:53

+0

Apache訪問日誌說,試圖訪問的重定向URL是什麼?因爲您正在掛載一個子URL,所以如果您沒有使用正確的方式來構建重定向,則它可能不會被重定向到相對於掛載點的位置。因此,請從Apache訪問日誌中發佈條目,以便確認要訪問的URL,並查看訪問日誌中的HTTP響應代碼。 – 2012-04-19 05:16:41

回答

4

你有沒有在你的apache2.conf中提到的「Listen 80」和「Listen 443」? This可能會有所幫助。