写点什么

漫画 Nginx 的 subfilter

发布于: 2021 年 04 月 02 日

大周五的,马上就要下班了,接到一个需求,一个老网站,需要加 SSL 证书,改成全站 HTTPS,没多想,不就是加个证书么


certbot 脚本一跑,证书自动配好



certbot 自动添加证书,并自动配置强制跳转到 HTTPS,访问测试


网站样式全乱,打开开发者工具



原来是资源都是 http 的,被浏览器 blocked,无法加载,查看代码,发现资源都是直接写死 http 协议的,内容很多,前端文件还都是压缩过的,这要手动改肯定是不可能的


突然想到 Nginx 的 subfilter 模块,subfilter 可以查询并修改 response 内容,所以可以将响应内容中的 http 替换为 https


nginx 的 sub 模块很简单,就 4 个指令,分别是

  • sub_filter

  • sub_filter_last_modified

  • sub_filter_once

  • sub_filter_types


sub_filter,就是替换指令,有两个参数,第一个是原字符串,第二个是目标字符串

sub_filter_last_modified 指令,是允许再替换期间,保留原始响应头中的 Last-Modified 字段,用来响应缓存,默认情况下是关闭的,就是在修改响应内容的时候,会删除标头字段

sub_flter_once 指令,是指定替换一次还是替换所有匹配到的字符串,默认是 on,替换第一次匹配到的,注意是第一次,不是第一个

sub_filter_types 指令,是可以根据 MIME 类型来指定替换指定类型的文件内容,而不是替换所有



通过这样的方式所有内容就会都变成 https 的请求,Nginx 配置很简单



subfilter 类型是文档类型,替换是将 http://替换为 https://,然后配置只替换一次,否则会一直处理替换操作


这要再次访问网站的时候,就可以正常访问,除了这种方式,其实在 linux 下,也可以通过 sed 命令遍历完全替换目录下所有文件中的 http,但是还是推荐用 Nginx 模块的方式,可以不去改动代码

发布于: 2021 年 04 月 02 日阅读数: 11
用户头像

运维技术社区,坚持运维技术研究与分享 2020.07.14 加入

「运维研习社」技术社区发起人,同名公众号「运维研习社」、知识星球,专注运维技术研究分享,坚持原创,希望能和大家在运维路上结伴而行!

评论

发布
暂无评论
漫画Nginx的subfilter