我在 上有一台服务器example.com
,在 上有另一台服务器example.com:10001
。
当用户尝试访问时,example.com:10001
他们最终会访问example.com:10001/index.php/login
,这才是应该的。
是否有重写规则来隐藏10001
端口以使其看起来像example.com/index.php/login
?
答案1
该评论中的详细信息表明,它example.com A
指向一个公共 IP,并且服务器位于 NAT 后面,并将端口转发到两个服务器:
问题在于使用该端口的站点
10001
由另一台服务器托管。example.com
是172.31.1.10
并且example.com:10001
是172.31.1.11
。
你可以有
在您的 上设置反向代理
172.31.1.10:80
,将查询代理到172.31.1.11:10001
。由于服务器是 Apache 2.4,因此正确的文档是:Apache 模块 mod_proxy。一个新的代理服务器,监听外部
example.com:80
,并反向代理到172.31.1.10:80
和172.31.1.11:10001
(或该其他服务器的任何内部端口)。Nginx 将是此操作的有效替代方案。文档:NGINX 反向代理。
在两种情况下,反向代理都需要配置为子文件夹或子域。
答案2
简短的回答是“不”。浏览器向用户隐藏了端口;当您使用 http 时,它会自动采用端口 80,而当您使用 https 时,它会自动采用端口 443,从而向用户隐藏这些端口。使用任何非标准端口时,大多数浏览器都会将端口显示为地址的一部分。
不过,如果我没有误解您的问题,那么有几种方法可以在同一个 IP 上托管多个网站。您可以使用子域 (myothersite.example.com),而不是使用不同的端口,或者您可以使用 example.com 下面的路径,例如 example.com/mysite2。
答案3
如果我理解你的问题,你可以使用 mod_rewrite 的 [P] 标志来实现这一点:
RewriteRule "/(.*)" http://example.com":10001/$1" [P]
还有其他注意事项,您可能应该直接使用 mod_proxy。