透明重定向到端口8080

4

我在我的服务器上有几个Web应用程序,它们运行在8080端口。

由于一些用户的防火墙无法访问8080端口,因此我想在我的Apache服务器上设置重定向。我希望以下URL能够实现重定向:

http://dev2.test.com/tomcat/somewebapp/restofthepath

显示可访问的内容

http://dev2.test.com:8080/somewebapp/restofthepath

当然,我不希望用户输入第一个地址后看到第二个地址。
我在 /var/www 中添加了以下 .htaccess 文件:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/(tomcat)
RewriteRule ^/tomcat/(.*)$ http://dev2.test.com:8080/$1 [P,QSA,L]

但是我在 /var/log/apache2/error.log 中收到了以下错误信息:

[Tue Oct 09 15:23:06 2012] [error] File does not exist:  proxy:http://dev2.test.com:8080/tomcat/

你能告诉我应该怎么做吗?

(涉及IT技术,具体情况需要进一步了解)

只需从您的重写规则中删除P标志即可。 - alk
@alk 我收到了这个响应:“在此服务器上找不到请求的URL /tomcat/。” - Denys Séguret
RewriteRule ^/tomcat/(.*)$ 中,你为什么需要 $ 符号? - alk
似乎不需要,但删除它也没有改变任何东西。经过多次测试,我认为RewriteRule的第一部分与我的URL不匹配。即使是'^/tomcat/'也似乎不匹配。 - Denys Séguret
不确定,但你尝试过这个吗:RewriteRule ^/tomcat(.*) http://dev2.test.com:8080$1 [QSA,L] - alk
显示剩余2条评论
2个回答

8

您应该使用mod_proxy代替mod_rewrite

ProxyPass /tomcat http://dev2.test.com:8000/
ProxyPassReverse /tomcat http://dev2.test.com:8000/

编辑:

这个配置必须在httpd.conf文件中,它可能位于VirtualHost部分或文件的根目录中。

您需要启用mod_proxy模块。可以通过以下方式完成:

LoadModule  proxy_module         /usr/lib/apache2/modules/mod_proxy.so
LoadModule  proxy_http_module    /usr/lib/apache2/modules/mod_proxy_http.so

很可能在你的站点的<VirtualHost>块中。 - lanzz
好的,它可以工作。不在VirtualHost部分,我没有这个。如果您不反对,我会在您的答案中添加一些内容以精确配置。 - Denys Séguret

2
你所做的只会向用户发送一个重定向到端口8080(他们无法使用)。你需要使用Apache mod_proxy或其他代理服务器。
ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar

你能告诉我应该在哪个文件中写这个吗? - Denys Séguret
上下文:服务器配置,虚拟主机,目录。请参阅文档。 - Nir Levy
谢谢Nir。32秒的迟到意味着你没有被接受,但当然你会得到一个赞。 - Denys Séguret
@dystroy 32秒就是我的人生故事 :) 希望我能稍微帮到你。 - Nir Levy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接