如何通过Nginx proxy_pass实现无跳转反向代理并隐藏源站DNS/IP
解决方案
你遇到的跳转问题核心是两个原因:一是源站/Cloudflare返回的重定向响应头Location字段用了原始域名,二是页面内的静态资源、跳转链接写死了原始站点域名。按照下方修改Nginx配置即可解决:
server { listen 80; server_name mysite.digital; location ^~ / { # 替换为你实际要代理的目标站点地址 proxy_pass https://siteseguro.com; proxy_set_header Host siteseguro.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Referer $http_referer; # 可选:模拟浏览器UA避免Cloudflare拦截代理请求 proxy_set_header User-Agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"; # 核心1:重写源站返回的重定向头,把原始域名替换为内部域名,避免跳转到真实站点 proxy_redirect https://siteseguro.com/ http://mysite.digital/; # 隐藏源站返回的敏感响应头,避免泄露真实站点信息 proxy_hide_header Server; proxy_hide_header X-Powered-By; proxy_hide_header alt-svc; # 核心2:替换页面内所有原始域名的链接为内部域名,保证静态资源、跳转正常加载 sub_filter "https://siteseguro.com" "http://mysite.digital"; sub_filter "siteseguro.com" "mysite.digital"; # 对所有响应类型执行替换(默认只替换text/html) sub_filter_types *; # 全局替换所有匹配内容,不是只替换第一个 sub_filter_once off; } }
额外说明
- 如果Cloudflare触发了代理拦截规则,你可以把代理服务器的出口IP加到Cloudflare的白名单中,或者将站点迁出Cloudflare后直接把
proxy_pass改为源站IP,Host头保留siteseguro.com即可,不会泄露真实源站信息。 - 如果你需要内部站点也用HTTPS访问,只需要给
mysite.digital配置SSL证书,把listen 80改为listen 443 ssl,同时把proxy_redirect里的http://mysite.digital/改为https://mysite.digital/即可。
内容的提问来源于stack exchange,提问作者rei
相关产品推荐
相关产品推荐

