Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache mod_作为代理重写不起作用_Apache_Mod Rewrite_Proxy_Mod Proxy - Fatal编程技术网

Apache mod_作为代理重写不起作用

Apache mod_作为代理重写不起作用,apache,mod-rewrite,proxy,mod-proxy,Apache,Mod Rewrite,Proxy,Mod Proxy,我尝试使用apache作为代理服务器,将一些请求重定向到运行在不同端口上的服务。我尝试按照这里的说明进行操作: 我完全是这样安装的(没有其他内容): 然后将/etc/apache2/httpd.conf编辑为: RewriteEngine on RewriteRule ^/(.*) http://localhost:9200/$1 [P] ProxyPassReverse / http://localhost:9200/ 最后,重新启动apache2(sudo服务apache2 restart

我尝试使用apache作为代理服务器,将一些请求重定向到运行在不同端口上的服务。我尝试按照这里的说明进行操作:

我完全是这样安装的(没有其他内容):

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

RewriteEngine on
RewriteRule ^/(.*) http://localhost:9200/$1 [P]
ProxyPassReverse / http://localhost:9200/
最后,重新启动apache2(
sudo服务apache2 restart
)。最后,我会给这个规则添加一些真实的条件,但我现在只是尝试测试一下


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

我建议您将Apache反向代理命令设置为以下内容:;注意
ProxyPass
设置以及
ProxyRequests
ProxyPreserveHost
设置:

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

它应该向您显示服务器的准确响应,这样您就可以完全了解哪些可能会失败,哪些可能会起作用。

谢谢-我想我应该补充一点,我尝试使用重写规则执行此操作的原因是,我最终可能需要一些相当复杂的重写,比仅仅通过ProxyPass看起来可能的还要多。@JoeK你把这两个问题搞混了。使用我的设置的服务器本身将代理所有流量到
http://localhost:9200/
。您使用
mod_rewrite
所做的完全不同,超出了该逻辑。是否有办法使用这些设置,但只转发特定的请求方法?退一步——我想做的是代理只获取请求,并且只获取那些到特定路径的请求,并拒绝所有其他请求。我尝试使用这样的设置,再加上一个额外的重写规则,但似乎在重写之前就发生了代理。例如,我添加了:
RewriteRule.*-[F]
,但所有请求仍然成功通过。@JoeK抱歉,但您的问题非常不集中&与您的问题不一致。请随意编辑您的问题,以便更具体地阐述您的目标。至于我的答案呢?完成。如果你觉得这个答案对你有帮助,请记得投票表决。如果是答案解决了你的问题,请记得勾选。
 <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 localhost:80/foo