返回正文
Are you an LLM? You can read better optimized documentation at /zh-CN/blog/2025-09/nginx-token.md for this page in Markdown format
iframe 的 src 链接里带了参数(比如 token 或签名),想在 Nginx 层做鉴权
这类需求常见于:父页面给子 iframe 一个「临时授权链接」,Nginx 校验合法性后才允许访问。
基础思路
- 前端 iframe 带参数
html
<iframe src="https://example.com/app?token=abc123"></iframe>
1
Nginx 拦截请求,读取 URL 参数(
token
)校验
token
是否合法:
- 简单场景:和预设值比对
- 复杂场景:交给后端鉴权服务检查
- 如果合法 → 继续代理目标内容
- 如果非法 → 返回 403/重定向到错误页
Nginx 配置示例
简单校验固定 token
nginx
server {
listen 80;
server_name example.com;
location /app {
# 提取 token 参数
if ($arg_token != "abc123") {
return 403; # token 不对,禁止访问
}
root /var/www/html; # 或者 proxy_pass 到后端
index index.html;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
这里 $arg_token
表示 URL 里的 ?token=xxx
参数。
使用子请求交给后端鉴权
如果 token
是动态的,需要和数据库/Redis 校验,可以让 Nginx
请求一个鉴权接口:
nginx
server {
listen 80;
server_name example.com;
location /app {
auth_request /auth; # 鉴权子请求
proxy_pass http://backend/app; # 通过鉴权才继续访问
}
# 鉴权子请求
location = /auth {
internal;
proxy_pass http://auth-service/check?token=$arg_token;
# 如果 auth-service 返回 2xx → 允许
# 如果返回 401/403 → 拦截
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
这里用到了 auth_request
模块,Nginx 会先访问 /auth
,拿返回码作为是否放行的依据。
更安全的做法
直接把 token 放 URL 参数有几个风险:
- 会出现在浏览器历史、日志、Referer
- 有被泄露的可能
👉 更安全的方式:
- 短期有效的签名 URL(类似阿里云 OSS / AWS S3 的 presigned URL)
- 或者在前端设置 Cookie,再让 Nginx 校验 Cookie
总结
用 $arg_token
可以直接在 Nginx 层校验参数更复杂的逻辑用 auth_request
转发到后端校验如果安全要求高,建议用 短期签名 URL 或 Cookie 代替 query 参数
VN/A |
本站访客数
--次 本站总访问量
--人次