我在具有单个公共 IP 的多台 Web 服务器中发布多网站时遇到问题,并且所有这些网站都使用相同的默认端口 80,但具有不同的 URL 地址。
我想在互联网上使用默认的 Http 端口 80 发布所有这些网站,并且不更改 Cisco 路由器的内部 Web 服务器中的默认端口 http。
可以帮我发布这些网站。
针对此问题我的网络架构:
我建议使用以下思科命令来解决此问题:
请告诉我你的看法:
类映射匹配所有 cweb1
match protocol http url "www.test-A.com"
策略映射 pweb1
class cweb1
路由图 rweb1 允许 10
match policy-list pweb1
ip nat 内部源静态 192.168.0.10 280.200.150.10 路由图 rweb1
但是我在这些命令中遇到的问题是,我无法使用这些命令发布超过 1 个网站。
如果对超过 1 个网站思科路由器使用这些命令,则会给出“错误”。
您有解决这些思科命令的解决方案吗?
答案1
您无法将公共 IP 地址上的端口映射到多个私有 IP 地址,这根本行不通,因为路由器如何知道要去哪一个?
如果您使用基于名称的虚拟主机,您可以通过在 Web 实例前面放置一个 HAProxy 实例并将所有流量从路由器引导到 HAProxy 实例来实现此目的。在 HAProxy 实例上,您可以创建一个前端并指定要使用的域和后端。然后,根据通过 HTTP 访问的域,它将请求转发到适当的后端以处理请求。
当我想节省服务器或 IP 资源时,我总是这样做。
/-----> Web Instance 1
Web ------> Router ------> HAProxy Instance ------> Web Instance 2
\-----> Web Instance 3
以下是我刚刚编写的 HAProxy 前端和后端的示例配置。这不是完整的配置文件,因此请使用 /etc/haproxy/haproxy.cfg 作为指南,以获得完整的配置。
frontend MAIN
bind *:80
mode http
acl EXAMPLE1_URL hdr_dom(host) -i www.example1.com
acl EXAMPLE2_URL hdr_dom(host) -i www.example2.com
acl EXAMPLE3_URL hdr_dom(host) -i www.example3.com
use_backend EXAMPLE1 if EXAMPLE1_URL
use_backend EXAMPLE2 if EXAMPLE2_URL
use_backend EXAMPLE3 if EXAMPLE3_URL
backend EXAMPLE1
mode http
server web1 192.168.1.1:80
backend EXAMPLE2
mode http
server web2 192.168.1.2:80
backend EXAMPLE3
mode http
server web3 192.168.1.3:80