Wordpress 尝试的web代理上的重定向循环

Wordpress 尝试的web代理上的重定向循环,wordpress,apache,mod-rewrite,redirect,mod-proxy,Wordpress,Apache,Mod Rewrite,Redirect,Mod Proxy,我有一台Apache服务器在web根目录下运行WordPress(/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.c

我有一台Apache服务器在web根目录下运行WordPress(
/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
可以替换为我自己之外的任意数量的奇数域

编辑:复制的行包括curl,因为我是从自己的命令行测试这种现象的

我的
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>
这种情况每天发生数十次。我有几个问题:

  • 我应该担心这么多的代理尝试吗?我已经关闭了mod_代理,当http请求循环时,https请求似乎返回
    301
    400
  • 有没有什么我应该担心的性能损失
  • 我该怎么修理这该死的东西

请告诉我您还需要什么信息。

apache for 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_重写规则,或者wordpress中的301重定向插件与apache上的规则冲突

现在,作为一般的经验法则,当我们托管基于虚拟主机名的vhost时,我们使用 服务器名默认值

并将其doc root设置为包含1个html文件和重写规则的目录,以将所有流量传输到index.html(html文件只是由托管的)中,这样可以过滤掉所有不基于域本身的垃圾流量,由于它只运行html,所以不需要任何基于php的iops,因为它只是静态html

这样,vhost将只处理其承载的域的请求。现在这并不能解决正在发生的301问题。如果您可以共享您的mod_rewrite配置,那么也许我们可以在其中提供一些帮助

我在社区中看到的基于SSL的流量的最大问题是,开发人员必须与负载平衡器集成,其中SSL证书在负载平衡器而不是apache上被截断。因此,您不能再执行重写条件/规则来检查https!=在上,当负载平衡器终止证书并将http(端口80)通信发送到您的Web主机时,将301重定向到一个新位置,以便apache始终认为它是未加密的,即使它遇到了安全的vhost

您的vhost上还有一个注释。最好不要使用.htaccess文件,除非您必须这样做。对于wordpress,vhost目录元素应该是这样的,以获得最佳性能

<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>

服务器名www.example.com
DocumentRoot/path/to/doc\u root
不允许超限
选项SYMBLINKSIFOwnerMatch多视图-索引
命令允许,拒绝
通融
重新启动发动机
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^.*$index.php[L]
我之所以说性能最佳,是因为apache不会在每次请求时都读取.htaccess文件。相反,它将其作为vhost config的一部分读取,并将配置保存在内存中,因此基本上,除了不必依赖.htaccess文件和覆盖的额外安全性之外,您还可以通过不使用.htaccess来节省大量iops


最后,使用RewriteBase是不相关的,有时只会引起问题,除非您在特定别名下托管wordpress,例如/blog/。在您的案例中,根据您的.htaccess文件,它似乎位于基本域上,因此不需要在其中包含该指令。有关参考信息,请参阅上面vhost配置中的重写规则。

您是否尝试过禁用插件?问题似乎不在于Apache配置或规则,除非问题中没有包含更多内容,因为您正在谈论
mod_proxy
https
,等等。这些规则在哪里?好主意。我已经关闭了mod_proxy,但是还有很多其他模块仍然处于打开状态,可能不需要打开。不过,我并不太怀疑它们,因为我的另一个web服务器的配置几乎相同。唯一的变量是WordPress.htaccess文件,但正如您所说的,它看起来很好@___@您正在使用默认的virtualhost目录根。但是默认的虚拟主机可能也是rung。请给出apache2-S或httpd-S的结果,活动虚拟主机的列表,可能还有这些其他虚拟主机的配置这些是唯一的
指令,第一个指令在
httpd-S
的输出中被列为默认主机。也许你应该在默认的vhost部分增加一些强调。谢谢你的回复。这是相当有见地的。我想我会设置一个默认主机,看看这是否有帮助。至于不使用
.htaccess
,我很确定WordPress要求设置是这样的。当您通过web界面进行配置时,
.htaccess
文件由WordPress自动生成。是的,它是自动生成的,但您不需要它。您可以直接在vhost中添加相同的规则。这就是我们运行所有wordpress实例的方式:P很高兴它帮助了你。我接受了你的答案。添加默认的
将流量定向到占位符
DocumentRoot
似乎缓解了这个问题。非常感谢。对不起,我花了这么长时间才实现!
<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>