免费版ngrok如何绕过浏览器警告页面?命令及配置尝试均失败
解决免费版ngrok跳过浏览器警告页面的可行方案
首先明确:你之前尝试的--request-header-add和配置文件里的request_header.add都是往ngrok转发到本地服务的请求里加头,而ngrok的警告页面是在用户请求ngrok服务器时触发的,所以这些设置根本不会被ngrok的边缘服务检测到,自然无效。
针对免费版无法配置边缘请求头的限制,给你两个实用的解决方法:
方法一:用Service Worker自动为所有请求添加跳过警告的头
这个方法能让客户扫码打开入口页面后,后续所有请求自动带上ngrok-skip-browser-warning: true头,彻底绕过警告页面。
在你的web服务根目录创建两个文件:
- 入口页面
index.html:<!DOCTYPE html> <html> <head> <title>加载中...</title> <script> if ('serviceWorker' in navigator) { window.addEventListener('load', async () => { try { await navigator.serviceWorker.register('/sw.js'); // 注册成功后跳转到你的实际业务页面 window.location.href = 'https://badger-glad-steadily.ngrok-free.app'; } catch (err) { alert('加载失败,请刷新重试'); } }); } else { // 不支持Service Worker的旧浏览器,直接跳转 window.location.href = 'https://badger-glad-steadily.ngrok-free.app'; } </script> </head> <body> 正在准备,请稍候... </body> </html> - Service Worker文件
sw.js:self.addEventListener('fetch', (event) => { // 为所有请求添加跳过警告的请求头 const newHeaders = new Headers(event.request.headers); newHeaders.set('ngrok-skip-browser-warning', 'true'); const modifiedReq = new Request(event.request, { headers: newHeaders }); event.respondWith(fetch(modifiedReq)); });
- 入口页面
让客户扫码访问你的ngrok域名(即指向这个
index.html的地址),第一次加载会注册Service Worker,之后所有请求都会自动带齐所需头,不会再出现警告页面。
方法二:用Nginx做本地反向代理(适合有服务器基础的用户)
如果你的本地环境能部署Nginx,可以通过Nginx转发请求时添加所需头,让ngrok的边缘服务检测到:
配置Nginx反向代理(假设你的web服务跑在8000端口):
server { listen 8080; server_name localhost; location / { proxy_pass http://localhost:8000; # 关键:添加请求头到转发给ngrok的请求中 proxy_set_header ngrok-skip-browser-warning true; } }启动Nginx后,用ngrok代理Nginx的8080端口:
ngrok http 8080这样ngrok收到的所有请求都会带有
ngrok-skip-browser-warning: true头,直接跳过警告页面。
补充说明
- 之前命令行报错是因为Windows CMD不识别单引号,换成双引号即可正常执行,但这个参数本身对跳过警告没用,不用纠结。
- HTTP请求头的键值对之间必须有空格,
ngrok-skip-browser-warning:true是不符合规范的,即使命令执行成功也不会被识别。
内容的提问来源于stack exchange,提问作者知識日常 Know Scratcher
相关产品推荐
相关产品推荐

