0

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

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

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

我现在可以让 mod 代理与 mod rewrite 一起工作,现在我没有收到 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

4 回答 4

3

除了已经给定的 mod_proxy 之外,另一个选项是 mod_jk。(对不起空格,否则格式混乱)

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

恕我直言 mod_jk 有几个优点

  • Tomcat 自动获取服务的主机名、协议和端口(使用 mod_proxy,您必须配置它在连接器中代理的事实,请参阅选项proxyName 和 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
于 2008-12-17T19:32:44.327 回答
2

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

于 2008-12-17T13:57:11.870 回答
0

您在 java 中的 httpclient 需要正确处理 301 答案。如果没有,它就坏了。如果您不想或不能,那么使用Paul 所指出的mod_rewrite / mod_proxy来“透明地”重定向是要走的路。看这里

于 2008-12-17T14:06:48.527 回答
0

使用 JK 和 mod rewrite 实现了这一点。问题在于两种方式的 SSL,我将端口配置为与 443 (SSL) 端口一起运行。

IE

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

我的 URL 重写看起来像这样


RewriteCond %{SERVER_PORT} 4342 RewriteRule上的RewriteEngine
^/$ /Lang/Englangservices/Alapbhet_service [L,PT]

感谢大家的投入。

于 2009-02-16T09:28:54.683 回答