使用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握手异常或性能损耗ssl_ciphers "HIGH:!aNULL:!MD5:!3DES"; - 禁用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
相关产品推荐
相关产品推荐

