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

Nginx反向代理后页面链接重写失效,sub_filter未生效

Nginx反向代理sub_filter不生效问题排查与修复

你的sub_filter未生效,核心原因是后端返回了gzip压缩的响应内容,Nginx默认不对压缩内容执行文本替换。结合你的场景,调整配置如下:

关键修复项

  • 让后端返回未压缩的明文内容,确保sub_filter能解析处理
  • 修正Host头配置,符合反向代理的正常逻辑
  • 补充覆盖更多链接格式的替换规则

修改后的完整配置

server {
    listen 443 ssl;
    server_name 192.168.110.136;

    ssl_certificate /etc/nginx/ssl/example.crt;
    ssl_certificate_key /etc/nginx/ssl/example.key;

    location ~*/plss/(?<subdomain>[^/]+)/(?<path>.*)$ {
        resolver 8.8.8.8;
        # 将Host设置为后端域名,避免后端生成异常链接
        proxy_set_header Host $subdomain.domain2.com;
        # 禁用压缩请求,强制后端返回明文
        proxy_set_header Accept-Encoding '';
        # 显式开启缓冲(默认已开启,显式声明更可靠)
        proxy_buffering on;

        sub_filter_once off;
        sub_filter_types *;
        # 匹配双引号包裹的绝对路径
        sub_filter '="/' '="https://192.168.110.136/plss/$subdomain/';
        # 额外匹配单引号包裹的绝对路径(覆盖更多场景)
        sub_filter '=\'/' '=\'https://192.168.110.136/plss/$subdomain/';

        proxy_pass https://$subdomain.domain2.com/$path;
    }
}

进阶优化(如需保留压缩)

如果不想放弃gzip压缩效率,可以让Nginx自动解压后端响应、完成替换后再重新压缩返回:

# 在server或location块内添加
gunzip on;
proxy_set_header Accept-Encoding gzip;

补充场景适配

如果页面中存在不带引号的绝对路径(如href=/xxx),需补充对应的替换规则:

sub_filter 'href=/' 'href=https://192.168.110.136/plss/$subdomain/';
sub_filter 'src=/' 'src=https://192.168.110.136/plss/$subdomain/';

内容的提问来源于stack exchange,提问作者Bechara Rizk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:01:27