通过 nginx 代理重写 HTML 源文件中的站外 URL

通过 nginx 代理重写 HTML 源文件中的站外 URL

我在 localhost 上运行的 Web 应用程序前面安装了 nginx,该应用程序监听端口 8085,我无法修改其 HTML 源文件。这些源文件通过 http 而不是 https 加载 Google 字体,这会在我的用户浏览器中生成混合内容警告。

因此,我想在页面通过 nginx 代理传输到用户时动态重写对 Google 字体的 http 调用。换句话说,我想重写:

http://fonts.googleapis.com/css?family=Roboto:400,700&subset=latin,cyrillic,greek,vietnamese

到:

https://fonts.googleapis.com/css?family=Roboto:400,700&subset=latin,cyrillic,greek,vietnamese

在页面 /application/example.html 中

我的 reverse-proxy.conf 文件中有以下块,我认为它可以做到这一点:

location /application/ {
    proxy_pass http://127.0.0.1:8085;

    # Replace http calls to Google with https ones
    proxy_set_header Accept-Encoding "";
    sub_filter 'http://fonts.googleapis' 'https://fonts.googleapis';
    sub_filter_once off;
    access_log off;
}

但它似乎不起作用。我看到有人提到我需要在编译 nginx 时启用 sub_filter,但我没有编译它 - 它是通过 Debian 上的 apt-get 安装的。有没有办法确定 sub_filter 是否已启用?

需要说明的是,我并不是想重写我的网站 URL 以使用 https 而不是 http,而是想重写非 https 的站外 URL。这似乎是个小问题,但我在 Google 上搜索了很久,却找不到任何可行的示例,因此任何建议都将不胜感激。

答案1

sub_filter*指令要求 ngx_http_sub_module默认情况下未构建模块,应使用--with-http_sub_module配置参数启用它。
使用 进行检查nginx -V

相关内容