![在家中使用相同端口(80 和 443)运行多个 Web 服务](https://linux22.com/image/1622507/%E5%9C%A8%E5%AE%B6%E4%B8%AD%E4%BD%BF%E7%94%A8%E7%9B%B8%E5%90%8C%E7%AB%AF%E5%8F%A3%EF%BC%8880%20%E5%92%8C%20443%EF%BC%89%E8%BF%90%E8%A1%8C%E5%A4%9A%E4%B8%AA%20Web%20%E6%9C%8D%E5%8A%A1.png)
是否有可能从我的家庭网络运行多个 Web 服务器应用程序?因此,使用相同的 IP 将端口 80 和 443 转发到不同的设备,具体取决于域名。现在我使用不同的端口,如 1001、1002 和 1003,并在路由器上将它们转发到正确端口上的特定设备。然而,我想要的是转到 sub.mydomaina.nl 以查看应用程序 A,转到 sub.mydomainb.nl 以查看应用程序 B,依此类推,或者使用相同的域,只是子域不同。
事情变得更加复杂,我在家里运行两个网络。我有 192.168.2.x 网络,我从中运行路由器作为 192.168.1.x 范围内的私有网络。在这两个网络上我都运行着 Web 应用程序。目前只有两个,Synology 和 Pihole,但我想尝试将旧笔记本电脑转换为 Apache 服务器,并能够从那里运行网站。我知道我可以在 Apache 中配置多个域,但这是否也适用于其他设备?我该如何配置它?
这可能吗?如果可能,我该如何实现?
提前致谢! :)
答案1
我知道我可以在 Apache 中配置多个域,但这也适用于其他设备吗?我该如何配置?
是的,如果你将 Apache 配置为反向代理它可以根据域(甚至根据 URL 路径)将请求转发到其他 Web 服务器。然后只需将端口 80 和 443 转发到中央 Apache 服务器,然后它会路由到各个应用程序。
您需要加载proxy
和proxy_http
Apache 中的模块,最基本的配置如下所示(针对一个域):
<VirtualHost *:80>
ServerName foo.example.com
ProxyPass / http://192.168.2.x
</VirtualHost>
如您所见,它的工作原理与常规 Apache vhost 非常相似,只是您通过 ProxyPass 指定远程 URL,而不是 DocumentRoot 或 Alias。(实际上有 3-4 种不同的方法可以完成相同的操作;您还可以找到在标签内使用 ProxyPass 的示例<Location>
,或者通过 SetHandler 甚至 RewriteRule 使用 ProxyPass。)
您可能还需要该ProxyPreserveHost
选项。如果启用了该选项,Web 应用程序将看到它正在通过“foo.example.com”进行访问;如果禁用了该选项,Web 应用程序将看到“192.168.2.x”。某些 Web 应用程序可能还需要一个ProxyPassReverse
语句来重写 HTTP 响应标头。
(笔记:不要将此设置与向前代理人!不要启用该ProxyRequests
选项。
最后,HTTPS 也是在 Apache 中使用标准 SSLEngine 和 SSLCertificateFile 选项配置的,而不是在代理 Web 应用程序本身中配置的。因此,您可以拥有一个集中的 Certbot 安装,只需使用ProxyPass /.well-known/acme/ !
或类似方法将其从代理中排除即可。
同样的流程也适用于 Nginx,此外,还有许多产品本身无法托管任何东西,只能作为专用代理(或负载平衡器)。正如 Peleion 的帖子中提到的,HAproxy 和 Træfik 就是两个这样的例子,尽管它们可能对您的用例来说有点小题大做。
答案2
您指的是反向代理 - 它根据您设置的规则将传入流量转发到特定应用程序。它可以用于任何事物,而不仅仅是 HTTP/S。
Nginx、Traefik 和 HAProxy 都可以执行您所要求的操作。
答案3
当然可以,但需要域名在 域名系统 (DNS)。
您可以通过注册商购买域名,注册商负责处理 域名注册 并提供定义子域的工具。例如Namecheap。
最好从您的 ISP 购买一个静态 IP 地址,因为 DNS 更新在全球范围内传播的速度很慢。
否则你需要 动态 DNS 供应商,并安排在 IP 发生变化时自动更新您的 IP。如果您更喜欢免费服务器,可以使用免费的动态 DNS 服务,但会对您的域名施加一些限制。付费服务对域名没有限制。