在家中使用相同端口(80 和 443)运行多个 Web 服务

在家中使用相同端口(80 和 443)运行多个 Web 服务

是否有可能从我的家庭网络运行多个 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 服务器,然后它会路由到各个应用程序。

您需要加载proxyproxy_httpApache 中的模块,最基本的配置如下所示(针对一个域):

<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 服务,但会对您的域名施加一些限制。付费服务对域名没有限制。

相关内容