我相信这个问题对你们大多数人来说都不难。过去两周我一直在苦苦思索这个问题。我准备放弃了。
情况如下:我的网络中有三台不同的 Raspberry Pi。每台都在运行不同的应用程序,我希望能够通过域名访问这些应用程序。网络中的 IP 地址属于以下模式192.168.178.x
Pi One 正在运行 Apache 作为反向代理以及 docker 和 bitwarden(IP: 98)
Pi Two 正在以 HassOs 的形式运行家庭助理(IP: 99)
Pi Three 正在运行 nextcloud 作为 snap 服务(IP: 100)
在 Pi One 上,我为每个服务都配置了/etc/apache2/sites-enabled/
一个配置。bitwarden 正在运行,如下所示:
<VirtualHost *:80>
ServerName bw.domain.com
ProxyPreserveHost On
DocumentRoot /var/www/html
ProxyPass /.well-known !
ProxyPass / http://localhost:8082/
ProxyPassReverse / http://localhost:8082/
RewriteEngine on
RewriteCond %{SERVER_NAME} =bw.domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
请记住,此服务也在 Pi One 上运行。理想情况下,重定向到 HTTPS 会发生在此文件上方,但我对 apache 的不熟练不允许如此整洁。我想要访问的第二个服务是 nextcloud。我已在另一个 Pi 上配置了它。Pi One 上的路由配置如下所示(许多无法正常工作的版本之一):
<VirtualHost *:80>
ServerName cloud.domain.com
ProxyRequests Off
RewriteEngine On
RewriteCond %{SERVER_NAME} =cloud.domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
RewriteRule ^ http://192.168.178.100:80/ [proxy,last]
ProxyPass / http://192.168.178.100:80/
ProxyPassReverse / http://192.168.178.100:80/
<Proxy http://192.168.178.100:80>
Require all granted
Options none
ProxySet enablereuse=on
</Proxy>
</VirtualHost>
我确信这个有很多问题。它是从一堆教程中拼凑起来的。然而,发生的事情是,即使我为这项服务激活了 SSL 证书,我在打开页面之前也会在浏览器中收到警告。然后,它只会打开 bitwarden,但在域名下cloud.domain.com
。我无法通过分配给它的域名访问 Pi Three,因此当我在网络之外时也无法访问。当然,现在这种情况并不常见,但这仍然是一个理想的情况。
有人能告诉我该怎么办吗?我无法再说出问题是什么了。如果需要,我可以提供日志信息以及所有其他可能相关的信息。我真的想了解我做错了什么。
谢谢您的考虑!
答案1
如果有人遇到这种情况,并且和我一样感到困惑,这就是云和 bitwarden 工作的原因。我仍然无法访问 Home Assistant。一旦我弄清楚了,我会更新这个,以防万一。
<VirtualHost 192.168.178.98:80>
ServerName cloud.domain.com
ProxyPreserveHost On
ProxyPass / http://192.168.178.100:80/
ProxyPassReverse / http://192.168.178.100:80/
RewriteEngine On
RewriteOptions InheritDownBefore
RewriteCond %{SERVER_NAME} =cloud.domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
来自 HTTPS 的重新路由流量转到端口 443,并被 letsencrypt 配置的虚拟主机捕获,如下所示:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName cloud.domain.com
ProxyPreserveHost On
DocumentRoot /var/www/html
ProxyPass /.well-known !
ProxyPass / http://192.168.178.100:80/
ProxyPassReverse / http://192.168.178.100:80/
RewriteEngine on
# Some rewrite rules in this file were disabled on your HTTPS site,
# because they have the potential to create redirection loops.
# RewriteCond %{SERVER_NAME} =bw.domain.com
# RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/bw.domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/bw.domain.com/privkey.pem
</VirtualHost>
</IfModule>
我知道这存在一些问题,但它对我来说是可行的。所以也许这对某些人有帮助。