通过反向代理连接到反向代理

通过反向代理连接到反向代理

我正在尝试设置一个名为 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* 将按预期工作。

相关内容