如何隐藏 URL 中的指定端口?

如何隐藏 URL 中的指定端口?

我在 上有一台服务器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.com172.31.1.10并且example.com:10001172.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:80172.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。

相关内容