【问题标题】:Transparent redirect to port 8080透明重定向到端口 8080
【发布时间】:2012-09-29 20:32:42
【问题描述】:

我的服务器上的 8080 端口上有一些 Web 应用程序可用。

由于我的一些用户由于他们的防火墙而无法访问端口 8080,我想在我的 apache 服务器上设置一个重定向。我想要以下网址

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/

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

【问题讨论】:

  • 只需从重写规则中删除 P 标志。
  • @alk 我收到此响应“在此服务器上找不到请求的 URL /tomcat/。”
  • 您需要在RewriteRule ^/tomcat/(.*)$ 中使用$ 来做什么?
  • 它似乎不需要,但删除它不会改变任何事情。经过多次测试后,我的印象是第一部分或 RewriteRule 与我的 URL 不匹配。甚至^/tomcat/ 似乎也不匹配。
  • 不确定,但你试过了吗:RewriteRule ^/tomcat(.*) http://dev2.test.com:8080$1 [QSA,L]

标签: regex apache .htaccess mod-rewrite redirect


【解决方案1】:

您可能应该使用mod_proxy 而不是mod_rewrite

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

编辑:

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

您必须启用 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> 块中。
  • 好的,它有效。不在 VirtualHost 部分,我没有。如果您不同意,我会在您的答案中添加一些内容以精确配置。
【解决方案2】:

执行您所做的只会向用户发送到端口 8080 的重定向(他们无法使用)。您需要使用apache mod_proxy 或其他代理服务器。

ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar

【讨论】:

  • 你能告诉我我应该把这个写在什么文件里吗?
  • 上下文:服务器配置、虚拟主机、目录。请参阅文档。
  • 谢谢尼尔。迟到 32 秒意味着你没有被接受,但你当然会得到支持。
  • @dystroy 32 秒是我生命中的故事 :) 希望我能帮上一点忙。
猜你喜欢
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
相关资源
最近更新 更多