You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需修改DNS记录测试网站的Nginx配置完善需求

无需修改DNS记录测试网站的Nginx配置完善需求

看来你已经找对了方向——用Nginx反向代理绕开DNS直接测试目标网站,这可比依赖第三方工具(比如你提到的skipdns.link)灵活太多,还能避开那些恼人的限制!针对你想要实现的「让skipdns.example.com的所有URL都对应展示example.com内容」的需求,我来帮你完善现有的配置,解决你没写完的替换问题:

先梳理下你现有配置的不足

你已经写了基础的反向代理和HTTP转HTTPS规则,但sub_filter只写了一半,而且默认的替换规则只能处理单次匹配、仅HTML内容,还没考虑到Cookie、压缩内容、多种域名引用形式(比如带HTTPS、不带协议的//example.com)这些细节,这些都会导致测试时页面资源加载异常或者功能失效。

完善后的完整Nginx配置

server {
    listen 80;
    server_name skipdns.example.com;
    # 强制跳转到HTTPS,和你的需求一致
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name skipdns.example.com;

    # 你的SSL证书配置,保持不变
    ssl_certificate /etc/letsencrypt/live/skipdns.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/skipdns.example.com/privkey.pem;

    location / {
        # 把请求完整转发到目标网站,包括请求路径
        proxy_pass https://example.com;
        
        # 传递必要的请求头,模拟真实访问
        proxy_set_header Host example.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;
        
        # 关闭原网站的Gzip压缩,否则sub_filter无法处理压缩后的内容
        proxy_set_header Accept-Encoding "";

        # 替换所有形式的目标域名引用,覆盖HTTPS、HTTP、无协议的情况
        sub_filter 'https://example.com' 'https://skipdns.example.com';
        sub_filter 'http://example.com' 'https://skipdns.example.com';
        sub_filter '//example.com' '//skipdns.example.com';
        sub_filter 'example.com' 'skipdns.example.com';
        
        # 开启全局替换(默认只替换第一次匹配)
        sub_filter_once off;
        # 对所有类型的响应内容进行替换(默认仅text/html)
        sub_filter_types *;

        # 替换Cookie中的域名,确保登录等依赖Cookie的功能正常
        proxy_cookie_domain example.com skipdns.example.com;
    }
}

关键配置的说明

  • proxy_set_header Accept-Encoding "":如果目标网站返回Gzip压缩的内容,Nginx的sub_filter无法识别替换,所以先关闭压缩,让内容以明文形式返回后再处理替换。
  • 多规则sub_filter:覆盖了目标域名所有可能的出现形式,避免页面里的图片、JS、CSS等资源还是指向原域名导致加载失败。
  • sub_filter_once off:确保页面中所有匹配的域名都被替换,而不是只替换第一个。
  • sub_filter_types *:不仅替换HTML内容,还会处理JS、CSS、JSON等所有类型的响应内容,保证全站资源路径都正确映射。
  • proxy_cookie_domain:把原网站设置的Cookie域名替换成skipdns.example.com,这样测试时登录、购物车等依赖Cookie的功能才能正常使用。

最后要注意的细节

  1. 确保你的Nginx安装了ngx_http_sub_module模块,这个是sub_filter功能的基础。可以用nginx -V命令查看编译参数,如果包含--with-http_sub_module就没问题;如果没有,需要重新编译Nginx或者安装对应版本的模块包。
  2. 配置写完后,先用nginx -t命令检查配置语法是否正确,没问题再用systemctl reload nginx(或对应系统的重启命令)让配置生效。
  3. 如果测试时还有部分资源没替换成功,可以打开浏览器的开发者工具,查看网络请求里的资源路径,补充对应的sub_filter规则即可。

备注:内容来源于stack exchange,提问作者Noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 10:03:10