我在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>
答案 0 :(得分:3)
已经给定的mod _ proxy的另一个选项是mod _ jk。 (抱歉这些空格,否则格式混乱)
两者都是apache扩展,允许apache使用请求,透明地将其转发到tomcat,等待响应,然后将结果发回。
IMHO mod_jk有一些优点
你最终使用的是完全你的选择 - 这两个选项之间的区别并非 。 (有人纠正我,如果是的话)
配置如下(未经测试的伪代码。做阅读文档,请理解你做的...)
# 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]
感谢所有人的投入。