跳转到内容

Nextin HTTPS 重写:证书安装、去广告与脚本

HTTPS 重写可以按规则对指定网址做重定向、拦截、改写,或者运行脚本处理请求和响应。常见用途:

  • 拦截 App 里的广告、追踪和统计请求;
  • 把某个接口地址重定向到另一个地址,修正失效链接;
  • 用脚本修改请求或响应,做接口调试和自动化处理。
  1. 已安装并完全信任 Nextin 的本机 CA 证书;
  2. 至少添加了一条重写规则,或导入了一个重写模块;
  3. 主页代理模式是 「规则」;
  4. 要重写的域名已经在 hostname 列表里(或者导入的模块里带了 hostname)。

证书没有被完全信任时,「启用 HTTPS 重写」开关是打不开的。

  1. Nextin →「设置」→「HTTPS 重写」→ 点击 「生成并安装 CA 证书」。
  2. App 会打开浏览器下载证书描述文件,按提示允许下载。
  3. 打开 iOS「设置」→「通用」→ 「VPN 与设备管理」,在“已下载的描述文件”里找到 Nextin 证书,点进去安装。
  4. 再进入「设置」→「通用」→「关于本机」→ 拉到最底部 「证书信任设置」。
  5. 找到 Nextin HTTPS Rewrite Root CA,打开完全信任的开关。
  6. 回到 Nextin 的 HTTPS 重写页面,等待状态变成“已信任”。

很多人卡在第 4–5 步:只安装不信任,开关依然打不开。 证书私钥只存在本机钥匙串里,不会同步到 iCloud,换设备要重新安装。

入口:「设置」→「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 列表里的域名才会被解密,没列进去的域名,规则写得再对也不会生效。每行一个,或用逗号分隔:

api.example.com
*.example.com
buy.itunes.apple.com, *.googlevideo.com
写法 匹配
api.example.com 只匹配这一个域名
*.example.com example.com 及其所有子域名
.example.com 同上

入口:「设置」→「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。

  1. CA 证书装了吗?
  2. 「证书信任设置」里打开完全信任了吗?
  3. 回到 Nextin 后状态刷新成“已信任”了吗?
  4. 主页是不是规则模式?

HTTPS 解密和脚本都需要额外计算,规则和脚本越多越耗电。不需要时可以暂时关闭,详见耗电说明。

Nextin 知识库是第三方非官方社区站点,与 NEXTIN INC 无关联。Nextin 名称及商标归其各自所有者所有。