Apache mod_rewrite作为代理无法正常工作

时间:2014-11-11 06:13:23

标签: apache mod-rewrite proxy mod-proxy

我正在尝试使用apache作为代理服务器将某些请求重定向到在不同端口上运行的服务。我正在尝试按照此处的说明操作:http://httpd.apache.org/docs/2.4/rewrite/proxy.html

我完成了这个安装(没有别的):

sudo apt-get install apache2
sudo a2enmod rewrite
sudo a2enmod proxy
sudo a2enmod proxy_http

然后编辑/etc/apache2/httpd.conf为:

RewriteEngine on
RewriteRule ^/(.*) http://localhost:9200/$1 [P]
ProxyPassReverse / http://localhost:9200/

最后,重新启动了apache2(sudo service apache2 restart)。最后,我将为该规则添加一些实际条件,但我现在只是想测试它。

但它不起作用。 curl -XGET localhost:80/foo以404响应失败,curl -XGET loaclhost:9200/foo成功。在错误日志或访问日志中没有任何用处。

1 个答案:

答案 0 :(得分:0)

我建议将Apache反向代理命令设置为这样;请注意ProxyPass设置以及ProxyRequestsProxyPreserveHost设置:

 <IfModule mod_proxy.c>

  # Proxy specific settings
  ProxyRequests Off
  ProxyPreserveHost On

  <Proxy *>
    AddDefaultCharset off
    Order deny,allow
    Allow from all
  </Proxy>

  ProxyPass / http://localhost:9200/ 
  ProxyPassReverse / http://localhost:9200/ 

</IfModule>

我还建议您使用curl选项检查-I中响应输出的标题:

curl -I localhost:80/foo

它应该向您显示服务器的确切响应,以便您可以完全了解可能失败的内容以及可能有效的内容。