代理修改请求来源规避域名白名单限制(以天地图为例)
原理:
主机名和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 头。 -
比如浏览器访问:
nginx 会根据
server_name test.aaa.net把请求路由到对应的 server block。
如果 nginx 里只写了 server_name localhost,但你访问的是 test.aaa.net,就不会匹配成功。
🚦结论
要让浏览器请求头里出现 白名单域名,并且 nginx 正确处理:
-
/etc/hosts把域名绑到127.0.0.1。 -
nginx
server_name配置成这个域名。 -
访问的时候用
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:

浙公网安备 33010602011771号