我有一個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堆棧溢出帖子中提出的方法是完美的,並正常工作。
您是否有通過HTTPS出現在服務器日誌中的請求?你收到Django的404或從Apache的錯誤?什麼軟件使用443端口(你可以用'netstat'查看)? – ilvar 2012-04-19 04:43:53
Apache訪問日誌說,試圖訪問的重定向URL是什麼?因爲您正在掛載一個子URL,所以如果您沒有使用正確的方式來構建重定向,則它可能不會被重定向到相對於掛載點的位置。因此,請從Apache訪問日誌中發佈條目,以便確認要訪問的URL,並查看訪問日誌中的HTTP響應代碼。 – 2012-04-19 05:16:41