Nextin HTTPS 重写:证书安装、去广告与脚本
HTTPS 重写可以按规则对指定网址做重定向、拦截、改写,或者运行脚本处理请求和响应。常见用途:
- 拦截 App 里的广告、追踪和统计请求;
- 把某个接口地址重定向到另一个地址,修正失效链接;
- 用脚本修改请求或响应,做接口调试和自动化处理。
开启前需要满足的条件
Section titled “开启前需要满足的条件”- 已安装并完全信任 Nextin 的本机 CA 证书;
- 至少添加了一条重写规则,或导入了一个重写模块;
- 主页代理模式是 「规则」;
- 要重写的域名已经在 hostname 列表里(或者导入的模块里带了 hostname)。
证书没有被完全信任时,「启用 HTTPS 重写」开关是打不开的。
安装并信任 CA 证书
Section titled “安装并信任 CA 证书”- Nextin →「设置」→「HTTPS 重写」→ 点击 「生成并安装 CA 证书」。
- App 会打开浏览器下载证书描述文件,按提示允许下载。
- 打开 iOS「设置」→「通用」→ 「VPN 与设备管理」,在“已下载的描述文件”里找到 Nextin 证书,点进去安装。
- 再进入「设置」→「通用」→「关于本机」→ 拉到最底部 「证书信任设置」。
- 找到 Nextin HTTPS Rewrite Root CA,打开完全信任的开关。
- 回到 Nextin 的 HTTPS 重写页面,等待状态变成“已信任”。
很多人卡在第 4–5 步:只安装不信任,开关依然打不开。 证书私钥只存在本机钥匙串里,不会同步到 iCloud,换设备要重新安装。
手动添加重写规则
Section titled “手动添加重写规则”入口:「设置」→「HTTPS 重写」→ 「添加重写规则」
| 字段 | 说明 |
|---|---|
| 名称 | 可选,方便自己识别 |
| 匹配 | 匹配完整请求 URL 的正则表达式 |
| 动作 | 见下表 |
| 重写目标 / 脚本 | 302、307、HEADER、SCRIPT 需要填写 |
| 脚本类型 | Request Header、Request Body、Response Header、Response Body |
匹配正则示例:
^https://api\.example\.com/v1/ads/.*^https://www\.example\.com/old-path| 动作 | 效果 | 需要目标 |
|---|---|---|
302 |
临时重定向到目标 URL | 是 |
307 |
临时重定向,并保持原请求方法(如 POST) | 是 |
REJECT |
直接拒绝请求 | 否 |
REJECT-200 |
返回一个空的 200 响应 | 否 |
REJECT-IMG |
返回一张占位图片 | 否 |
REJECT-DICT |
返回空 JSON 对象 {} |
否 |
REJECT-ARRAY |
返回空 JSON 数组 [] |
否 |
HEADER |
内部转发到替换后的 URL,客户端看不到跳转 | 是 |
SCRIPT |
执行远程脚本 | 是 |
302、307、HEADER 的目标里可以用正则捕获组 $1、$2。
去广告时选哪种 REJECT? App 期待的是图片就用 REJECT-IMG,期待 JSON 对象/数组就用 REJECT-DICT / REJECT-ARRAY,拿不准就用 REJECT-200。直接 REJECT 有时会让 App 反复重试或报错。
填写 hostname
Section titled “填写 hostname”只有 hostname 列表里的域名才会被解密,没列进去的域名,规则写得再对也不会生效。每行一个,或用逗号分隔:
api.example.com*.example.combuy.itunes.apple.com, *.googlevideo.com| 写法 | 匹配 |
|---|---|
api.example.com |
只匹配这一个域名 |
*.example.com |
example.com 及其所有子域名 |
.example.com |
同上 |
导入重写模块
Section titled “导入重写模块”入口:「设置」→「HTTPS 重写」→ 「导入重写模块」,可以粘贴模块内容或填写模块 URL,也可以通过 Deep Link 一键导入。
模块兼容常见的 Shadowrocket 风格,结构如下:
#!name=示例模块[MITM]hostname = api.example.com, *.example.com
[URL Rewrite]^https://api\.example\.com/v1/ads url reject-200^https://api\.example\.com/old url 302 https://api.example.com/new
[Script]示例脚本 = type=http-response, pattern=^https://api\.example\.com/v1, requires-body=true, script-path=https://example.com/script.js, timeout=10| 段落 | 支持的内容 |
|---|---|
[General] |
force-http-engine-hosts |
[MITM] |
hostname |
[URL Rewrite] |
302、307、reject、reject-200、header |
[Map Local] |
仅 data="" status-code=200,会转换成 REJECT-200 |
[Script] |
type=http-request、type=http-response |
[Rule] |
仅 UDP 的 REJECT / REJECT-DROP |
[Script] 必须包含 type、pattern、script-path 三项,可选参数有 requires-body、binary-body-mode、argument、max-size、timeout。
开关打不开?按顺序检查
Section titled “开关打不开?按顺序检查”- CA 证书装了吗?
- 「证书信任设置」里打开完全信任了吗?
- 回到 Nextin 后状态刷新成“已信任”了吗?
- 主页是不是规则模式?
HTTPS 解密和脚本都需要额外计算,规则和脚本越多越耗电。不需要时可以暂时关闭,详见耗电说明。
Nextin 知识库是第三方非官方社区站点,与 NEXTIN INC 无关联。Nextin 名称及商标归其各自所有者所有。