我在 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
。