2013-02-16 53 views
1

我有一個在web根目錄下運行WordPress的Apache服務器(/var/www/html)。在我的訪問日誌我已經看到表格中的很多條目:試圖在網絡代理上重定向循環

98.209.16.114 - - [15/Feb/2013:21:19:51 -0500] "GET http://www.twitter.com HTTP/1.1" 301 - "-" "curl/7.28.1" 
98.209.16.114 - - [15/Feb/2013:21:19:51 -0500] "GET http://www.twitter.comhttp/www.twitter.com HTTP/1.1" 301 - "-" "curl/7.28.1" 
98.209.16.114 - - [15/Feb/2013:21:19:51 -0500] "GET http://www.twitter.comhttphttp/www.twitter.comhttp/www.twitter.com HTTP/1.1" 301 - "-" "curl/7.28.1" 
98.209.16.114 - - [15/Feb/2013:21:19:52 -0500] "GET http://www.twitter.comhttphttphttp/www.twitter.comhttphttp/www.twitter.comhttp/www.twitter.com HTTP/1.1" 301 - "-" "curl/7.28.1" 

其中www.twitter.com可以與任意數量的外部,以我自己的奇域所取代。

編輯:複製的行包括捲曲,因爲我從我自己的命令行測試了這種現象。

httpd.conf文件中的相關行是:

NameVirtualHost *:80 

<VirtualHost *:80> 
    DocumentRoot /var/www/html 
    ServerName www.mydomain.com 
    <Directory /var/www/html> 
    AllowOverride All 
    </Directory> 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName mydomain.com 
    RewriteEngine On 
    RewriteRule ^/(.*) http://www.mydomain.com/$1 [L,R=301] 
</VirtualHost> 

.htaccess文件在WordPress目錄的樣子:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

這種情況發生幾十每天次。我有幾個問題是:

  • 我應該擔心這麼多的代理嘗試嗎?我關閉了mod_proxy,而http請求正在循環,https請求似乎要麼返回301400
  • 有什麼樣的性能損失我應該擔心嗎?
  • 我該如何修補織物?

讓我知道你需要什麼其他信息。

+0

你有沒有嘗試禁用插件?看起來問題不在於Apache配置或規則,除非問題中包含更多內容,因爲您正在討論'mod_proxy','https'等。這些規則在哪裏? – 2013-02-23 12:37:45

+0

好想法。我關閉了mod_proxy,但還有很多其他模塊仍處於打開狀態,可能不需要。我不太懷疑他們,但因爲我的其他Web服務器有幾乎相同的配置。唯一的變量是WordPress .htaccess文件,但正如你所說的那樣。 @ ___ @ – 2013-02-23 19:34:53

+1

您正在使用默認的虛擬主機目錄Root。但默認的虛擬主機也可能是runng。給我們的Apache2 -S或httpd的-S,積極virtualhostAnd也許這些virtualhosts – regilero 2013-03-01 08:26:58

回答

2

你需要的Apache爲WordPress加載的模塊僅在以下......這不包括你的PHP模塊,我會解釋說,多一點之後:

LoadModule authz_host_module modules/mod_authz_host.so 
LoadModule log_config_module modules/mod_log_config.so 
LoadModule expires_module modules/mod_expires.so 
LoadModule deflate_module modules/mod_deflate.so 
LoadModule env_module modules/mod_env.so 
LoadModule setenvif_module modules/mod_setenvif.so 
LoadModule mime_module modules/mod_mime.so 
LoadModule autoindex_module modules/mod_autoindex.so 
LoadModule dir_module modules/mod_dir.so 
LoadModule alias_module modules/mod_alias.so 
LoadModule rewrite_module modules/mod_rewrite.so 
LoadModule negotiation_module modules/mod_negotiation.so 
LoadModule headers_module modules/mod_headers.so 

根據您是否正在運行PHP FCGI或php mod_php的(prefork的),那麼你將包括下列之一:

#---- For FPM of PHP Enable both below and disable php5_module 
LoadModule fastcgi_module modules/mod_fastcgi.so 
LoadModule actions_module modules/mod_actions.so 
#---- For standard php5 module enable below and disable 2 above 
#LoadModule php5_module modules/libphp5.so 

重定向是我根據你的日誌輸出看到看起來更像是一個錯誤配置的mod_rewrite規則,或301重定向插件在與apache上的規則衝突的wordpress。

現在,作爲一個一般的經驗法則,當我們基於主機了NameVirtualHost虛擬主機,我們創建了一個默認虛擬主機與 服務器名默認

,並設置它的doc根,其中包括1個HTML文件,重寫規則目錄將所有流量轉移到index.html(該html文件只輸出,由承載)這樣,您可以過濾掉所有不基於您的域本身的垃圾流量,並且由於它只運行html,所以它不會需要基於PHP的任何iops,因爲它只是靜態html。

這樣你的虛擬主機將只處理它所託管的域的請求。現在,這並沒有解決301問題正在發生的問題。如果你可以分享你的mod_rewrite配置,那麼或許我們可以提供幫助。

我在與基於SSL流量的社區看到的最大的問題是當開發人員必須與在SSL證書,負載平衡器上,而不是Apache的截斷負載均衡器集成。隨着中說,你可以不再做一個重寫條件/規則,以檢查是否HTTPS!=上,重定向301到新位置的負載平衡器終止證書,併發送HTTP(80端口)的流量到您的虛擬主機提供商以便Apache會一直以爲這是未加密的,即使它擊中你的虛擬主機一個確保虛擬主機

,還應注意。最好不要使用.htaccess文件,除非你的絕對是必須。對於wordpress來說,虛擬目錄元素應該看起來像這樣,以獲得最佳性能。

<VirtualHost *:80> 
     ServerName www.example.com 
     DocumentRoot /path/to/doc_root 
     <Directory /path/to/doc_root/> 
       AllowOverride None 
       Options SymLinksIfOwnerMatch MultiViews -Indexes 
       Order allow,deny 
       Allow from all 
       RewriteEngine On 
       RewriteRule ^index\.php$ - [L] 
       RewriteCond %{REQUEST_FILENAME} !-f 
       RewriteCond %{REQUEST_FILENAME} !-d 
       RewriteRule ^.*$ index.php [L] 
     </Directory> 
</VirtualHost> 

我說最佳性能的原因是.htaccess文件在每個請求中都沒有被apache讀取。它,而不是把它讀成一部分的虛擬主機配置等本質上你節省大量的IOPS通過不讓它通過.htaccess除了額外的安全性不必依靠.htaccess文件和覆蓋在內存中保存配置。

最後使用RewriteBase是無關緊要的,有時只是導致prolems,除非你在像/ blog /這樣的特殊別名下託管wordpress。在你的基於.htaccess文件的情況下,它似乎在基本域中,所以不需要在那裏有這個指令。有關參考,請參閱上面的vhost配置中的重寫規則。

+0

不錯的答案。也許你應該在默認的虛擬主機部分增加一些重點。 – regilero 2013-03-01 08:27:59

+0

感謝您的回覆。這非常有見地。我想我會設置一個默認主機,看看是否有幫助。至於不使用'.htaccess',我很確定WordPress需要安裝程序是這樣的。當您通過Web界面配置WordPress時,'.htaccess'文件是由WordPress自動生成的。 – 2013-03-05 21:02:58

+1

是的,它是自動生成的,但你不需要它。您可以直接在虛擬主機中添加相同的規則。這就是我們如何運行我們所有的wordpress實例:P很高興它幫助你。 – 2013-03-06 02:01:43