访问网站需要白名单?是用nginx来解决
- 工作小总结&小工具类
- 时间:2025-06-14 18:01
- 346人已阅读
🔔🔔好消息!好消息!🔔🔔
有需要的朋友👉:微信号
在访问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网关、微服务入口层。