2010-07-21 70 views
1

我有一些域指向同一個網絡服務器,並希望將其設置爲將所有傳入流量重寫爲一個一致的域。我以前做過這件事,確保請求有www。在其中,但是當我將下面的腳本添加到網站時,它開始凍結。RewriteCond在HTTP_HOST凍結網站?

RewriteCond %{HTTP_HOST} !^www\.domain\.com(.*) [NC] 
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,NC,L] 

我想補充後要對我的.htaccess(以上所有我的其他重寫),將文件保存到服務器上,該網站通常會在大約10秒鐘內未操作,並請求將其後纔開始凝固起來。我知道這很奇怪,這發生在文件保存到服務器後。如果我刪除上面的行,它會立即開始工作。

我有點失落,至於什麼可能導致這個奇怪的問題。

UPDATE: 我檢查了我重寫日誌之前比較和進行了更改後。我看到很多這些錯誤

127.0.0.1 - - [21/Jul/2010:12:57:35 --0400] [280082-web1.dummy.com/sid#2b4899b49d30][rid#2b489a396148/initial] (2) [perdir /var/www/html/] rewrite '*' -> 'http://www.dummy.com/*' 
127.0.0.1 - - [21/Jul/2010:12:57:35 --0400] [280082-web1.dummy.com/sid#2b4899b49d30][rid#2b489a396148/initial] (2) [perdir /var/www/html/] explicitly forcing redirect with http://www.dummy.com/* 

的我還檢查我的訪問日誌相同時間戳和看到這一點:

127.0.0.1 - - [21/Jul/2010:12:57:35 -0400] "OPTIONS * HTTP/1.0" 301 333 "-" "Apache/2.2.3 (Red Hat) (internal dummy connection)" 

我有KeepAlive保持打開。這是否會導致問題?

還試圖加入這個COND我重寫,它仍然錯誤: 的RewriteCond%{REMOTE_ADDR} 127.0.0.1

+0

奇怪。你是否啓用了RewriteLog?也許一些舊的mod_vhost_limit設置? (主)虛擬主機的配置也很重要。 – Wrikken 2010-07-21 14:10:00

+0

任何想法爲什麼我收到錯誤500時,我將日誌記錄添加到我的.htaccess(我從來沒有嘗試過日誌記錄)。代碼:RewriteEngine on RewriteLog「/var/www/rewrite.log」 RewriteLogLevel 4(rules) – 2010-07-21 15:23:02

+0

logging指令只適用於服務器或虛擬服務器上下文,所以你不能在'.htaccess'中定義它們文件。另外,當你的'error_log'開始凍結時,是否有任何條目?你的網站是否有大量的流量或任何東西? – 2010-07-21 16:44:45

回答

1

我會說這是我的一部分投機開始(我不會過於熟悉Apache處理的這一方面),但對於評論有點冗長,希望它有助於進一步研究這一點。

由於您可能正在運行像prefork這樣的MPM,因此Apache管理子進程的方法包括向它們發送喚醒它們的請求。我相信這曾經是一個GET請求,但是鑑於請求一個真實資源可能會給服務器帶來不必要的壓力,因此它現在似乎發送了一個OPTION請求。

您還表示您已將KeepAlive設置爲On。如果您的請求需要大量時間(就典型請求而言),則您的子進程可能會與服務器產生新進程以處理其他傳入流量的點相關聯。因此,如果你的值設置得足夠低,一旦進程釋放,Apache可能會有很多孩子被殺。

要殺死它們,它需要在你的日誌中設置OPTION請求,以確保它們是清醒的。這最終將由您的mod_rewrite規則來處理,如果與其他所有規則放在一起,可能會導致您遇到的極端減速。

我不確定爲什麼您的RewriteCond無法阻止重定向。你可以試試,但我不確定它爲什麼會有不同:

RewriteCond %{REQUEST_METHOD} =OPTIONS [NC] 
RewriteRule ^.*$ - [R=200,L]  

RewriteCond %{HTTP_HOST} !=www.example.com [NC] 
RewriteRule ^.*$ http://www.example.com/$0 [R=301,L] 
+0

垃圾仍然凍結網站。我想我必須爲每個域添加一個RewriteCond,而不是通配符。 – 2010-07-21 22:37:56

+0

該死的。嗯,我沒有完全遵循,你能詳細說明你的意思嗎? – 2010-07-22 07:08:31

+0

喜歡它: RewriteCond%{HTTP_HOST} = www.foo.com [NC] RewriteCond%{HTTP_HOST} = www.bar.com [OR,NC] RewriteRule ^。* $ http://www.domain。 com/$ 0 [R = 301,L] – 2010-07-23 14:52:39

相關問題