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

使用sub_filter时Nginx响应延迟过高的配置排查及优化咨询

关于Nginx协议隔离配置的正确性验证与优化建议

我们通过Nginx在客户端与基础设施间实现协议隔离,因基础设施限制需用sub_filter修改响应内容,但目前存在明显延迟,需验证以下配置正确性:

  • 响应修改配置
  • 缓存禁用配置(PUT请求时不希望大文件存储在Nginx服务器)

当前站点的Nginx配置如下:

map $status $auth_service {
  401  'service uri="$http_X_OAPI_Forwarded_Proto://$http_X_OAPI_Forwarded_Host$http_X_OAPI_Forwarded_Prefix"';
}

server {
   listen 10.222.22.222:443;
   server_name service.monsite.fr;
   access_log /var/log/nginx/service.access.log;
   error_log /var/log/nginx/service.error.log;
   ssl on;
   ssl_certificate /etc/ssl/certs/service.monsite.fr.crt;
   ssl_certificate_key /etc/ssl/private/service.monsite.fr.key;
   ssl_session_timeout 5m;
   ssl_protocols TLSv1.3 TLSv1.2;
   ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
   ssl_prefer_server_ciphers on;
    location / {
    proxy_set_header Accept-Encoding "";
    rewrite ^/(.*) /$1 break;
    proxy_set_header Host $host;
    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_cache off;
    proxy_redirect http:// https://;
    proxy_pass https://172.10.0.9:12665;
    sub_filter_types *;
    sub_filter 'https://internalurl.monsite.fr:13080' 'https://externalurl.monsite.fr';
    sub_filter 'https://internalurl.monsite.fr:13080' 'https://externalurl.monsite.fr';
   }
}

一、配置正确性验证

1. 响应修改配置

  • sub_filter_types *;配置正确,指定对所有Content-Type的响应执行内容替换
  • 存在重复的sub_filter规则:两条完全相同的替换规则会额外增加Nginx的字符串匹配开销,是导致延迟的潜在原因之一,建议仅保留一条
  • proxy_set_header Accept-Encoding "";配置合理:强制后端不返回压缩响应,避免Nginx需要先解压再执行替换操作,减少处理步骤

2. 缓存禁用配置

  • proxy_cache off;已全局禁用代理缓存,PUT请求的大文件不会被存储在Nginx服务器上,完全符合需求
  • 补充说明:Nginx默认不会缓存PUT请求,但全局禁用缓存的配置更彻底,无需额外调整

二、性能优化建议

  • 移除重复的sub_filter规则:删除其中一条重复的替换规则,减少不必要的字符串匹配操作,直接降低响应处理延迟
  • 优化sub_filter替换范围:若需要替换响应中所有匹配的URL,显式添加sub_filter_once off;(默认值为on,仅替换第一次匹配项),避免重复添加规则的错误做法
  • 修复SSL密码套件语法错误:当前ssl_ciphers配置中的or是语法错误,正确写法应为:
    ssl_ciphers "HIGH:!aNULL:!MD5:!3DES";
    
    错误语法可能导致SSL握手异常或性能损耗
  • 禁用proxy_buffering(针对大文件PUT):添加proxy_buffering off;到location块中,让Nginx直接透传PUT请求体,避免将大文件临时缓冲到服务器内存或磁盘,减少延迟与资源占用
  • 启用SSL会话缓存:添加ssl_session_cache shared:SSL:10m;到server块中,复用SSL会话,大幅减少SSL握手时间,提升HTTPS请求性能
  • 移除无用的rewrite规则:rewrite ^/(.*) /$1 break;无实际作用,因为location已匹配根路径,proxy_pass会直接转发请求路径,删除该规则可减少Nginx的规则解析开销
  • 调整日志策略:若access_log默认是info级别,可改为access_log /var/log/nginx/service.access.log main buffer=32k;启用缓冲日志,减少磁盘IO操作;非调试阶段可降低error_log级别至warn,减少日志写入量

内容的提问来源于stack exchange,提问作者Kévin Pemonon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:20:28