代理修改请求来源规避域名白名单限制(以天地图为例)

原理:

主机名和nginx需要同时修改配合使用:

1. 主机名(/etc/hosts)

  • /etc/hosts 负责把域名解析到 IP。

  • 例如:127.0.0.1   test.aaa.net

这样当你在浏览器输入 http://test.aaa.net:9999 时,本地 DNS 会告诉系统:
test.aaa.net → 127.0.0.1,所以实际请求打到你的本机。

如果只改 hosts,但 nginx 没有配置 server_name test.aaa.net,nginx 收到请求也找不到匹配的 server block,就会用默认的,可能直接丢 403。

2. nginx 配置

  • server_name 负责匹配请求时的 Host 头

  • 比如浏览器访问:

     
    GET / HTTP/1.1 Host: test.aaa.net:9999

    nginx 会根据 server_name test.aaa.net 把请求路由到对应的 server block。

如果 nginx 里只写了 server_name localhost,但你访问的是 test.aaa.net,就不会匹配成功。

🚦结论

要让浏览器请求头里出现 白名单域名,并且 nginx 正确处理:

  1. /etc/hosts 把域名绑到 127.0.0.1

  2. nginx server_name 配置成这个域名。

  3. 访问的时候用 http://test.aaa.net:9999 打开项目。

这样:

  • 浏览器带的 Origin / Referer 就是 http://test.aaa.net:9999

  • nginx 也能根据 server_name test.aaa.net 正确响应。

具体操作

1.修改本机名:

修改 /etc/hosts

sudo vim /etc/hosts 

127.0.0.1   test.aaa.net(白名单)

应用修改:

sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

2.修改 nginx 配置:

server {
    listen 9999;
    server_name test.aaa.net;

    location / {
        proxy_pass http://t0.tianditu.gov.cn/;   # 假设你的前端 dev server 在 5173
        proxy_set_header Host $host;
        proxy_set_header Referer "http://test.aaa.net/";
        proxy_set_header Origin "http://test.aaa.net";
    }
}

3.重启 nginx:

sudo nginx -s reload

4.项目访问:

http://test.aaa.net:9999

这样浏览器的 Referer / Origin 就是 http://test.aaa.net:9999,能匹配天地图白名单。

posted @ 2025-09-16 10:46  SimoonJia  阅读(36)  评论(0)    收藏  举报