使用 Apache 和多个物理服务器的反向代理

使用 Apache 和多个物理服务器的反向代理

我相信这个问题对你们大多数人来说都不难。过去两周我一直在苦苦思索这个问题。我准备放弃了。

情况如下:我的网络中有三台不同的 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>

我知道这存在一些问题,但它对我来说是可行的。所以也许这对某些人有帮助。

相关内容