2010-10-27 119 views
4

我已經爲billing.example.com設置了兩個本地虛擬主機(http和自簽名https)並在firefox中用螢火蟲嘗試它們。 Http虛擬主機的唯一目的是將所有請求重定向到https。Apache SSL啓用虛擬主機返回隨機400錯誤請求

幾乎每次我從https請求頁面,一個或兩個文件與相關的資源(圖像,JS,CSS等),有時PHP頁面本身返回400錯誤的請求在螢火蟲窗口,有時一個或兩個文件顯示爲已加載很長時間。 當我點擊螢火蟲中的問題鏈接時,文件會按照它應該加載的方式加載。 此外,差錯請求或未加載的文件幾乎每次我加載頁面時都會發生變化。

任何想法?

服務器:Ubuntu的10.04,阿帕奇/ 2.2.14的mod_ssl與

虛擬主機:

Listen 80 
<VirtualHost *:80> 
    ServerName billing.example.com 
    UseCanonicalName On 
    DocumentRoot /code/site/billing 
    ... 
    RewriteEngine On 
    RewriteRule ^/(.*)$ https://billing.example.com/$1 
</VirtualHost> 

Listen 443 
<VirtualHost *:443> 
    ServerName billing.example.com 
    UseCanonicalName On 
    DocumentRoot /code/site/billing 
    ... 
    SSLEngine On 
    SSLCertificateFile /code/site/ssl/example.crt 
    SSLCertificateKeyFile /code/site/ssl/example.key 
</VirtualHost> 

其餘來自Ubuntu的Apache2默認設置。

+1

如果你直接訪問'https:// billing.example.com /',你可能會更好的在serverfault.com上詢問這個問題 – 2010-10-27 17:18:02

+0

它可以工作嗎?我不確定我是否會將整個URI空間完全重寫爲HTTP到HTTPS:它會使通過HTTP進行的所有請求都像通過HTTPS一樣工作,並且人們傾向於關閉通知,告訴他們要去從HTTPS到HTTP,所以他們不會注意到(不安全的)重定向。如果使用HTTP(或至少將所有內容重定向到「root」:https:// billing.example.com /'),最好使它失敗。 – Bruno 2010-10-27 17:23:50

+0

serverfault上的類似問題。沒有解決方案,雖然:(http:// serverfault。com/questions/226040 /間歇性400-bad-request-header-field-is-missing-with-apache-and-ssl – theon 2012-08-21 16:29:35

回答

0

對於ssl部分,您可能需要轉向UseCanonicalName Off對於虛擬主機,您可能使用的是與主服務器不同的域,這可能會導致您在虛擬主機之外查找文件。

爲了完整性在端口80上,我將[R,L]添加到重定向中。

RewriteEngine On 
RewriteRule ^/(.*) http://billing.example.com/$1 [L,R] 
0
我是有這個問題與Apache 2.2.9升級到Apache 2.2.22

解決了這個問題對我來說。

我會在一些頁面請求中隨機獲得400個響應代碼。有時候會有圖片,有時候是AJAX請求有時候,頁面本身會隨着這條消息返回400。

壞請求 您的瀏覽器發送該服務器無法理解的請求。 請求標題字段缺少':'分隔符。 活

我發現以下地毯報告似乎有關。該錯誤是固定在阿帕奇2.2.15:https://bugzilla.redhat.com/show_bug.cgi?id=652335

我認爲使用HTTPS時,這個錯誤是很多隨機誤差的原因: 您的瀏覽器發送的請求,該服務器無法理解 請求頭字段缺少':'分隔符。

所以想到我會嘗試更新到最新的Apache與最新的mod_ssl - 這似乎工作。