Apache Web服务器重定向发布请求

时间:2008-12-17 13:47:25

标签: apache tomcat mod-rewrite

我在4个端口上配置了apache(虚拟主机,因为某些端口使用HTTPS),目的是将发布请求重定向到在其他计算机上的TOMCAT实例中运行的不同servlet。调用来自httpclient(java客户端)。当我运行客户端时,它会抛出错误301错误:永久移动。需要有关如何解决此问题的提示/提示/帮助。

如果有人能给我一个例子,那就太好了。我的虚拟主机(重定向) 看起来像这样的东西

<VirtualHost _default_:3334>
  RewriteEngine On
  RewriteRule ^/$ https://192.168.100.23:38443/Lang/Englangservices/Alapbhet_service
<\VirtualHost>

我现在能够使用mod重写使用mod代理,现在我没有得到302错误,但是因为新手总是会遇到另一个问题。

HTTP POST请求无效。当我发出post请求时,代理失败,因为它继续寻找index.htm。

我的httpd.conf片段

<VirtualHost *:3331>
  ServerName localhost:3331
  ProxyPass / http://192.168.100.23:38443/Lang/Englangservices/Alapbhet_service
  ProxyPassReverse / http://192.168.100.23:38443/Lang/Englangservices/Alapbhet_service
  RewriteEngine on
  RewriteRule ^/$ http://localhost:3331/
</VirtualHost>

4 个答案:

答案 0 :(得分:3)

已经给定的mod _ proxy的另一个选项是mod _ jk。 (抱歉这些空格,否则格式混乱)

两者都是apache扩展,允许apache使用请求,透明地将其转发到tomcat,等待响应,然后将结果发回。

IMHO mod_jk有一些优点

  • Tomcat自动获取服务的主机名,协议和端口(使用mod_proxy,您必须配置它在连接器中代理的事实,请参阅选项proxyName and proxyPort
  • mod_jk提供负载均衡 - 如果您需要此
  • apache在为此任务设计的协议(ajp13)中与tomcat交谈。使用mod_proxy,他们会谈论http,它的开销略高一些(披露:我自己从未测量过它,只是鹦鹉学舌)。

你最终使用的是完全你的选择 - 这两个选项之间的区别并非 。 (有人纠正我,如果是的话)

配置如下(未经测试的伪代码。阅读文档,请理解你做的...)

# somewhere in httpd.conf, above the virtual hosts
JkWorkersFile /etc/apache2/workers.properties
JkLogFile     /var/log/apache/mod_jk.log
JkLogLevel    error

# your existing part with virtual hosts
<VirtualHost ...>
   ....
   JkMount /Lang/* tomcat1
   JkMount /Lang   tomcat1  # if you need the directory itself also to be forwarded
   ....
</VirtualHost>

# the workers.properties file described above
# 'tomcat1' is the reference used above as argument to JkMount
workers.list=tomcat1
worker.tomcat1.port=8009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1

答案 1 :(得分:2)

如果你真的想要重定向,301听起来像是适当的响应,但也许你真的想代理请求,以便客户端不知道重定向?在这种情况下,请查看使用mod_proxy作为反向代理。

答案 2 :(得分:0)

你的java中的httpclient需要正确处理301个答案。如果没有,那就破了。如果您不想或不想,那么使用保罗指示的mod_rewrite / mod_proxy来“透明地”重定向是可行的方法。见here

答案 3 :(得分:0)

使用JK和mod重写实现了这一点。问题在于双向SSL,我将端口配置为与443(SSL)端口一起运行。

即。

注意:如果打算在虚拟主机中重写URL,则必须为每个虚拟主机重新加载JK mount。

我的网址重写如下

重写发动机 RewriteCond%{SERVER_PORT} 4342
RewriteRule ^ / $ / Lang / Englangservices / Alapbhet_service [L,PT]

感谢所有人的投入。

相关问题