无需修改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的功能才能正常使用。
最后要注意的细节
- 确保你的Nginx安装了
ngx_http_sub_module模块,这个是sub_filter功能的基础。可以用nginx -V命令查看编译参数,如果包含--with-http_sub_module就没问题;如果没有,需要重新编译Nginx或者安装对应版本的模块包。 - 配置写完后,先用
nginx -t命令检查配置语法是否正确,没问题再用systemctl reload nginx(或对应系统的重启命令)让配置生效。 - 如果测试时还有部分资源没替换成功,可以打开浏览器的开发者工具,查看网络请求里的资源路径,补充对应的
sub_filter规则即可。
备注:内容来源于stack exchange,提问作者Noob
相关产品推荐
相关产品推荐

