我正在尝试设置一个名为 AzuraCast 的网络广播环境。我正在使用提供的 Docker 安装脚本来设置多个容器:
- Web 服务器容器
- 一个“站点”容器
- 一个 nginx 代理,它应该充当所谓的反向代理来访问 web 容器
- mariadb 容器
- 以及一些目前不感兴趣的东西。
在我的服务器上,我正在运行一个 apache2 docker 容器(php:apache
),我已经在其上设置了反向代理来访问我已安装的其他 docker 容器(例如 nextcloud、airsonic 等):
<IfModule mod_ssl.c>
<VirtualHost *.443>
# ...
ProxyPass /audio http://airsonic:4040/audio
ProxyPassReverse /audio http://airsonic:4040/audio
ProxyPass /nextcloud http://nextcloud
ProxyPassReverse /audio http://nextcloud
ProxyPass /git http://git:3000
ProxyPassReverse /git http://git:3000
# ...
</VirtualHost>
</IfModule>
现在,当我想访问 AzuraCast 安装的 Web 容器时,在我的服务器上,我只需要访问 http://localhost:8298(8298 是我使用的 HTTP 端口,因为 80 已被我的 apache2 容器使用)。但是,如果我想为 AzuraCast Web 前端创建反向代理,我会假设我只需要添加
# since the container-internal HTTP port from the nginx proxy is still 80, there's no need to specify a port here
ProxyPass /radio http://azuracast_nginx_proxy_1
ProxyPassReverse /radio http://azuracast_nginx_proxy_1
但是,当我尝试通过反向代理访问 AzuraCast 后端时https://my.domain/radio,我可以访问该页面,但所有图片或链接都无法使用,这让我怀疑是否需要上下文路径之类的东西,或者代理密码是否配置正确。后端如下所示:
它看起来应该是这样的:
现在我的问题是:
我是否应该设置类似环境变量的东西?链接和图片都不起作用,因为后端代理没有将路径添加/radio
到网站提供的链接中,所以应该看起来像这样的路径https://my.domain/radio/login
只能看起来像这样https://my.domain/login
。
提前致谢。
答案1
链接和图片都不起作用,因为后端代理没有将路径添加
/radio
到网站提供的链接[.]
最简单的答案可能是尝试使用单独的子域(分别是 Apache 中的虚拟主机或 Nginx 中的服务器块),而不是例如/radio
。因此,例如在 Apache 中类似以下内容:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName radio.example.com
# ServerAlias radio.localhost
# DocumentRoot "/www/unneeded"
ProxyPass / http://azuracast_nginx_proxy_1/
ProxyPassReverse / http://azuracast_nginx_proxy_1/
# ...
</VirtualHost>
</IfModule>
让我们加密
请注意,对于 Let's Encrypt HTTP 验证,您可能需要在端口 80 上有一个单独的、非转发的子域:
<VirtualHost *:80>
ServerName radio.example.com
# ServerAlias radio.localhost
DocumentRoot "/www/http-auth-folder"
</VirtualHost>
/www/http-auth-folder
如果您希望自动将浏览器重定向到您网站的 HTTPS 版本而不干扰 Let's Encrypt 查询,您应该能够使用带有元刷新的索引页(例如,根目录为 0)。
答案2
让您的应用程序知道它将使用无线电目录进行引用。我会将其放在无线电目录中,并配置应用程序以知道它将从无线电目录运行。然后 proxypass* 将按预期工作。