有人能告诉我,要为我的家庭办公环境寻找路由器/网关/防火墙,以便能够在端口 80 上运行多个 Web 服务器,并使用一个公共 IP。我知道可以在服务器计算机上使用 Apache 或 IIS 来实现。Cisco 或 Netgear 路由器?
例如:
host1.example.com:80 -> 192.168.0.101
host2.example.com:80 -> 192.168.0.102
答案1
Openwrt 对 apache/squid 的支持很好。我甚至用 apache 做反向代理。你唯一需要的就是一台兼容 openwrt 的路由器。
第二件事,您需要以这种特殊的代理工作方式设置 apache(我建议使用 apache)。这并不像看起来那么难。如果您愿意,我很乐意在这篇文章中复制粘贴一些配置示例。
这种代理对 CPU 的需求没有太大问题 - 大多数路由器的 CPU 并不强 - 因为这种硬件/软件配置所做的工作实际上并不像转发数据包那样多。没有像 fe php-interpretation 或 jvm 这样的 CPU 密集型事物,并且 apache 可以在线程模式下使用其“工作者”mpm 运行,速度非常快。
答案2
路由器通常不运行服务器。如果基于 OpenWRT 和 DD-Wrt 的路由器有足够的内存,它们可以提供此功能。这是因为它们运行的是 Linux 内核。Web 服务器功能是通过运行 Web 服务器或代理(如 Apache 或 Squid)来实现的。
如果您有多个小型网站需要服务器,则可以使用 Rasberry Pi 或类似设备来运行您的网站。如果您需要更多容量,运行 Linux 的小型服务器可以同时提供防火墙和 Web 服务器功能。我从一个回收的桌面系统开始,该系统带有第二个运行 Linux 的网卡,既可用作 Web 服务器,又可用作防火墙。
我在 Web 服务器上进行这种分离。主要 Web 服务器根据 Host 标头处理内容交付。Apache Web 服务器将此功能称为 VirtualHosts。可以将 Host 的部分或全部流量代理到第二台服务器。
多域名 HTTPS 更难实现,因为证书与主机名相关联。如果域名相关,则可以使用多域名或通配符证书。有些服务器可以在提供证书之前协商主机名,尽管我从未成功实现过这一点。
您需要让路由器将 HTTP 请求转发到 Web 服务器。大多数路由器通过端口和/或 DMZ 地址提供此功能。