博文精选 | 漫画 Nginx 的 subfilter
2022-05-27 13:57:18
F5小安
文章速览:
行业:互联网
关键字:Nginx、subfilter、SSL、HTTPS
摘要:大周五的,马上就要下班了,接到一个需求,一个老网站,需要加 SSL 证书,改成全站 HTTPS,没多想,不就是加个证书么
阅读时长:3分钟
以下文章来源于InfoQ!作者:运维研习社
大周五的,马上就要下班了,接到一个需求,一个老网站,需要加 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 模块的方式,可以不去改动代码
以上是针对subfilter的分享,希望对大家有帮助!
声明:本文章版权归原作者及原出处所有 。凡本社区注明“来源:XXX或转自:XXX”的作品均转载自其它媒体,转载目的在于传递分享更多知识,内容为作者个人观点,仅供参考,并不代表本社区赞同其观点和对其真实性负责。本社区转载的文章,我们已经尽可能的对作者和来源进行了注明,若因故疏忽,造成漏注,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本社区拥有对此声明的最终解释权。
发布评论 加入社群
相关文章

博文精选 | nginx 性能优化 -- 配置解析
F5小安
2022-07-21 10:35:06 512

博文精选 | 一篇文章搞定 Nginx 反向代理与负载均衡
F5小安
2022-05-26 10:31:14 917

博文精选 | 负载均衡方式
F5小安
2022-05-25 09:52:55 451

回复评论
发布评论