访问网站需要白名单?是用nginx来解决
- 工作小总结&小工具类
- 时间:2025-06-14 18:01
- 9人已阅读
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
在访问A网站的时候,需要白名单,于是想着,能不能在nginx上配置解决这个问题呢?
因为凯哥有个公网IP,是固定的,把公网ip配置到A网站白名单中,然后是用nginx来解决的。
直接上代码:
set $nginx_public_ip "123.123.123.123"; # 请写入你添加A网站的白名单ip # 配置 location /myapi/ { # 1. 保存原始参数 set $orig_args $args; # 2. 构建新参数 - 使用变量避免$符号问题 set $fixed_params "appkey=123456&pid=mm_49813693_359950439_100059950089&name=heihei # 3. 合并参数(处理空参数情况) if ($orig_args = "") { set $args $fixed_params; } if ($orig_args != "") { set $args $orig_args&$fixed_params; } # 4. 路径转换 - 使用rewrite但保留参数 rewrite ^/myapi/(.*)$ /$1?$args break; # 5. 代理设置 proxy_pass # 这里是需要访问的A网站域名 # 6. IP白名单处理 proxy_set_header Host a.test.cn; # 设置访问头 proxy_set_header X-Real-IP $nginx_public_ip; proxy_set_header X-Forwarded-For $nginx_public_ip; proxy_set_header True-Client-IP $remote_addr; # 7. 详细的调试信息 add_header X-Original-Args $orig_args; add_header X-Final-Args $args; add_header X-Proxy-URL " # 这里的a.test.cn是你需要访问的a网站 }
以下是对 Nginx 配置的详细分析和使用场景说明:
配置功能解析
固定参数注入
set $orig_args $args; # 保存原始URL参数set $fixed_params "appkey=xxx&pid=xxx..."; # 预定义固定参数
空参数处理:
if ($orig_args = "")
直接使用$fixed_params
非空参数处理:
if ($orig_args != "")
将原始参数与固定参数用&
拼接目的:强制在请求中添加认证/跟踪参数(如
appkey
,pid
)路径重写
rewrite ^/myapi/(.*)$ /$1?$args break;
将
/myapi/xxx
重写为/xxx
,并保留拼接后的参数(?$args
)break
标志终止后续重写规则,直接执行proxy_pass
代理与头部控制
proxy_pass http://a.test.cn; proxy_set_header Host a.test.cn; # 覆盖Host头 proxy_set_header X-Real-IP $nginx_public_ip; # 伪装客户端IP proxy_set_header X-Forwarded-For $nginx_public_ip; # 覆盖代理链IP proxy_set_header True-Client-IP $remote_addr; # 保留真实客户端IP
IP白名单场景:通过覆盖
X-Forwarded-For
和X-Real-IP
,使后端认为请求来自固定IP(123.123.123.123
)审计需求:
True-Client-IP
记录真实客户端IP供内部审计调试支持
add_header X-Original-Args $orig_args; # 原始参数 add_header X-Final-Args $args; # 最终参数 add_header X-Proxy-URL "http://..."; # 完整代理URL
通过响应头暴露参数转换和URL信息,便于排查问题
关键使用场景
1. 第三方API鉴权代理
问题:调用第三方API需固定密钥(如
apkey
),但客户端不可见该密钥方案:Nginx层动态注入认证参数,客户端只需请求
/myapi/
优势:避免密钥泄露,统一鉴权管理
2. 联盟营销(Affiliate)跟踪
问题:需要为所有请求添加推广ID(如
pid=mm_49813693...
)方案:自动注入推广参数,后端统计佣金归属
典型场景:电商CPS、广告跟踪系统
3. IP白名单访问
问题:后端服务仅允许特定IP访问(如
123.123.123.123
)方案:覆盖
X-Forwarded-For
和X-Real-IP
,伪装成白名单IP注意:需确保Nginx出口IP已被后端信任
4. API版本迁移/路径标准化
问题:后端接口路径变更(如
/aaa
替代旧路径),但需兼容旧客户端方案:通过
rewrite
转换路径,客户端仍请求/myapi/
5. 调试与日志审计
问题:排查参数修改是否生效
方案:
add_header
返回调试信息,无需查看后端日志
潜在优化建议
参数合并简化
使用map
替代if
避免潜在歧义:map $args $new_args { default "$args&$fixed_params"; "" $fixed_params;}set $args $new_args; # 直接赋值
正则性能优化
rewrite
中的(.*)
可改为更精确的匹配(如^/myapi/([a-zA-Z0-9_]+)$
)生产环境关闭调试头
移除add_header
或添加条件判断:if ($debug_mode = "1") { add_header X-Proxy-URL "http://...";}
总结
此配置的核心逻辑是:在反向代理过程中动态修改请求路径和参数,同时控制客户端IP的传递方式。适用于需要隐藏敏感参数、统一注入跟踪信息、IP访问控制及API路径兼容的场景。
典型行业:电商平台对接、广告跟踪系统、第三方API网关、微服务入口层。