Apache mod_作为代理重写不起作用
我尝试使用apache作为代理服务器,将一些请求重定向到运行在不同端口上的服务。我尝试按照这里的说明进行操作: 我完全是这样安装的(没有其他内容): 然后将/etc/apache2/httpd.conf编辑为: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
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