如何从 http 请求 url 中去除端口号?

如何从 http 请求 url 中去除端口号?

我使用 httpd 服务器进行负载平衡和作为 Web 服务器。我想将我的请求从:http://主机名:端口/服务http://主机名/服务 如何使用 RewriteRule 或任何其他技术来实现?

答案1

来自:portURI 方案(RFC 3986,3) 语法成分:

     foo://example.com:8042/over/there?name=ferret#nose
     \_/   \______________/\_________/ \_________/ \__/
      |           |            |            |        |
   scheme     authority       path        query   fragment

3.2.3. 端口

授权的端口子组件由主机后面的十进制可选端口号指定,并以单个冒号 ( :) 字符与其分隔。

  port        = *DIGIT

方案可以定义默认端口。例如,方案http定义了一个默认端口80,对应于其保留的 TCP 端口号。端口号指定的端口类型(例如 TCP、UDP、SCTP)由 URI 方案定义。如果端口为空或其值与方案的默认值相同,则 URI 生成者和规范化器应省略端口组件及其“:”分隔符。

所以,

  • http://example.com仅等于http://example.com:80
  • https://example.com仅等于https://example.com:443
  • 对于任何其他端口,该端口在 URL 中可见。

如果你有一个 Web 服务,例如,在 上http://example.com:8080/service,并且你想在 上使用不同的 Web 服务器(例如,作为负载平衡器)http://example.com/service,那么你需要一个反向代理在 Web 服务器上监听端口80。在 Apache 中,这是通过模块完成的mod_proxy

<Location "/service">
  ProxyPass "http://example.com:8080/service"
</Location>

相关内容