如何向用户显示与后端服务器不同的网络端口号

如何向用户显示与后端服务器不同的网络端口号

我正在尝试向用户显示 443 端口号。我有两个如下所示的 URL, https://mainadmin.dev.example:8443/mainadmin https://studentblog.dev.example:8443/Studentblogpage 但现在我想更改其中一个 URL,例如 https://studentblog.dev.example/Studentblogpagehttps://studentblog.dev.example:443/Studentblogpage

是否可以像下面的代码那样进行更改?

frontend port_8443
bind *:8443 ssl crt /etc/haproxy/ssl/certificate/crt.txt
reqadd X-Forwarded-Proto:\ https
acl mainadm path_reg -i ^/MainAdm.*$
acl StudentBlog path_reg -i ^/StudentSite.*$
use_backend MainAdm-Devl if { sslsni admmain.dev.example } Mainadm
use_backend Studentblog-Devl if { sslsni studentblog.dev.example } StudentBlog
mode http
option tcplog
backend MainAdm-Devl
mode http  
balance roundrobin
cookie SERVERID insert indirect nocache
server webserver01 server-01.dev.example:8443 ssl check verify none cookie a1
server webserver02 server-02.dev.example:8443 ssl check verify none cookie a2
backend Studentblog-Devl
mode http
balance roundrobin
option httpchk GET /Studentblogpage
cookie SERVERID insert indirect nocache
server webserver04 server-04.dev.example:443 ssl check verify none
server webserver05 server-05.dev.example:443 ssl check verify none backup

答案1

实际上,有很多方法可以将流量从端口 8443 转发到 443。

首先,您可以使用 NAT 和 PAT (NAPT) 将目标端口为 8443 的流量转换为 443 上的系统(或根据需要反之亦然)。如果您无法管理控制网络上的路由器来配置此功能,那么您必须联系网络管理员,并且前提是您的网络实施了 NAT/PAT(大多数私有网络都这样做以节省 IPv4 地址空间)。

不过,根据您的问题,如果您只想基于配置来执行此操作,您可以配置另一台前端服务器并将其配置为公开监听端口 443,然后通过重定向在内部转发该流量。

或者,如果这与您的环境不冲突,您可以首先将您的 Web 服务器更改为监听 443(尽管根据您的问题,很可能确实如此)。

答案2

是的,您可以使用 HAProxy 代理端口 443 或端口 8443,并将其路由到后端监听不同端口的服务器。这就是使用代理的好处。您的前端可以有多条“绑定”行,每条行指定要监听的不同端口。

当您使用 HAProxy 终止 SSL 时,正如您所做,您可以访问 HTTP 消息中的所有信息。因此,您可以直接检查 ACL 语句中的 Host 标头(您不需要检查 SNI - 虽然您可以使用“ssl_fc_sni”获取方法。“sslsni”不正确)。

acl StudentBlog path_beg -i Studentblogpage
use_backend Studentblog-Devl if { req.hdr(Host) studentblog.dev.example  } StudentBlog

在此示例中,如果两个条件都成立,则使用“Studentblog-Devl”后端:

  • 主机头是 'studentblog.dev.example'
  • URL 路径以“Studentblogpage”开头

如果您只想将 Studentblog 更改为监听端口 443 而不是主管理站点,那么最好创建两个“前端”并将它们分开,以便它们只能监听它们应该监听的端口。

相关内容