我在 App.domain.com 内部运行一个 Apache Web 应用程序服务器。它通过在防火墙/网关处使用端口转发作为 app.domain.com:10080 向外部公开。
Access 通常在内部 ( http://app.domain.com
) 和外部 ( http://app.domain.com:10080
) 都有效,但在开发和配置期间(从外部进行),应用程序不知何故将端口 (10080) 存储在其配置中,并且偶尔会在某些提供的 URL 中弹出。然后显示为"http://app.domain.com:10080/some/text/..."
从开发发生的外部来看这不是问题,并且可以正确解决,但从内部访问时会产生错误,因为服务器不是在端口 10080 上运行,而是在端口 80 上运行。
我现在正在尝试修复此问题,并想知道哪种方法是解决此问题的首选方法。我是否应该使用单独的 VirtualHost 指令将 10080 上的请求代理到端口 80:
<VirtualHost *:10080>
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
AddDefaultCharset Off
Order allow,deny
Allow from all
</Proxy>
ProxyPass / http://app.domain.com/
ProxyPassReverse / http://app.domain.com/
</VirtualHost>
或者我应该使用重定向:
<VirtualHost *:10080>
##{and any one of:}
Redirect permanent / http://app.domain.com/
## OR ## Redirect / http://%{HTTP_HOST}$1
## OR ## Redirect / http://app.domain.com/
</VirtualHost>
或者这是否需要 mod_rewrite?
我尝试了几个选项,但似乎仍然无法让它正常工作,因为某些页面(代理/重定向)似乎无法正确呈现,也许我的条目还不够正确。
我最终需要对 https 做同样的事情,但我首先尝试让它在 http 上运行,然后再进行复制。
Server version: Apache/2.4.18 (Ubuntu) / Server built: 2017-09-18T15:09:02
谢谢您的指点。
答案1
重定向:向客户端返回重定向响应。
改写:在客户端不知情的情况下内部更改 URL 指向的内容。它可以选择向客户端返回重定向响应,但这要复杂得多,而且容易出错。
代理人:将请求转发到其他地方并将响应返回给客户端。
如果无法在应用程序中修复此问题,则重定向将是最简单、最容易和最快的解决方案。
对于你的情况,你需要使用:
Redirect permanent "/" "http://app.domain.com:80/"