我有一台 Raspberry Pi,它通过 Apache 为几个静态网站提供服务并做一些其他的事情。
现在我又收到了另一台 Raspberry,所以我在上面安装了 NextCloudPi,我想将一个新的子域名(例如 cloud.domain.com)从第一台 Raspberry 重定向到新的 Raspberry。我尝试在我的 domain.conf 文件中添加以下内容:
<VirtualHost *:80>
ServerName cloud.domain.com
RedirectPermanent / <localIP>
</VirtualHost>
但这会重定向到默认的 Apache 网站并破坏我的其他域名。重定向该子域名的正确方法是什么?
另外,我想为 Nextcloud 使用带有 lets-encrypt 的 ssl,就像我对主域所做的那样:子域是否需要额外的证书?简单的 Apache 重定向足以确保安全连接吗?
编辑:根据答案中的建议,我现在尝试在 cloud.conf 中进行以下配置,但我一直被重定向到我的其他域名站点之一。
<VirtualHost *:80>
ServerName cloud.domain.com
ServerAlias cloud
ProxyPass / http://192.168.1.200
ProxyPassReverse / http://192.168.1.200
ProxyPreserveHost On
ProxyPass /.well-known/acme/ !
</VirtualHost>
答案1
子域名是否需要额外的证书?
是的。证书明确列出了它们可以代表的名称,但不会自动包含子域名。
(LE 允许您获取多域证书,但我不会费心——我认为为新域获取单独的证书更干净,因为无论如何您都要为每个 VirtualHost 单独配置 SSLCertificateFile。多域证书在同一个 vhost 有多个 ServerAliases 的情况,或者在软件根本不支持 TLS SNI 的情况下更有用。)
它是实际上可以*.domain.com
从 Let's Encrypt 获取一个“通配符”证书,它将涵盖所有可能的子域,但在某些方面会更麻烦 - 让每台设备处理自己的证书会容易得多。
简单的 Apache 重定向足以确保安全连接吗?
不。重定向是客户端的——它们告诉浏览器直接连接到其他位置,所有经过重定向的请求都将完全绕过原始 Apache 服务器。重定向的功能与在地址栏中输入目标 URL 没有什么不同。
重定向该子域名的正确方法是什么?
在这种情况下,你不想要重定向。相反,请求必须是转播由原始 Apache 服务器(因为端口转发的限制,这是唯一可从外部访问的服务器)。
这就是所谓的“反向代理”模式(mod_proxy_http),您可以使用它来启用ProxyPass
在您的 VirtualHost 内。在许多情况下,您还希望启用该ProxyPreserveHost
选项。
查看其他类似的帖子,例如:在家中使用相同端口(80 和 443)运行多个 Web 服务
注意:使用反向代理时,你的浏览器始终会建立 TLS 连接仅限代理– 它看不到后端服务器使用的证书,实际上它甚至不知道后端连接是 HTTPS 还是纯 HTTP。
这意味着需要在第一个 Raspberry Pi(代理)上设置“cloud.domain.com”的 Let's Encrypt。要使您的 LE 客户端正常工作,您需要将 Apache 配置为排除/.well-known/acme-challenge
代理,并使用第二个 ProxyPass!
作为目标。
同时,第二个 Raspberry Pi(后端)仅由代理访问,并且对浏览器不可见,因此它可以使用任何证书甚至是纯 HTTP,这取决于您对 LAN 内部安全性的熟悉程度。
笔记2:不要启用“ProxyRequests”选项 - 仅用于“正向代理”(如 Squid)。