当前位置: 首页 > news >正文

ngx_http_scgi_module 技术指南

一、快速上手示例

http {# 定义 SCGI 参数(标准 CGI 环境变量)include       /etc/nginx/scgi_params;server {listen      80;location /app/ {# 将请求转发到本地 9000 端口的 SCGI 服务器scgi_pass    localhost:9000;# 只转发非空的 HTTPS 参数scgi_param   HTTPS $https if_not_empty;# 关闭请求体缓冲(边读边发)scgi_request_buffering off;# 读响应超时 30sscgi_read_timeout         30s;# 仅 100KB 缓冲首部scgi_buffer_size          100k;scgi_buffering            on;}}
}

二、核心指令速览

指令功能概述
scgi_pass设置 SCGI 服务器地址(host:portunix:/path.sock
scgi_param传递 SCGI 请求参数(CGI 环境变量),支持 if_not_empty
scgi_bind指定本地出站 IP(或 transparent
scgi_buffering开启/关闭响应缓冲
scgi_buffer_size / scgi_buffers缓冲区大小及数量
scgi_busy_buffers_size发送中与未读缓冲区的最大占用
scgi_read_timeout读取 SCGI 响应超时(两次读之间)
scgi_send_timeout发送请求到 SCGI 服务器超时
scgi_request_buffering缓冲客户端请求体
scgi_connect_timeout建立与 SCGI 服务器连接超时
scgi_cache_path…/scgi_cache配置共享内存缓存路径及缓存区,用于响应缓存
scgi_cache_key自定义缓存键
scgi_cache_valid设置不同响应码的缓存有效期
scgi_cache_use_stale在错误/超时时返回旧缓存
scgi_cache_background_update背景更新过期缓存,同时先返回旧数据
scgi_cache_lock…单并发填充缓存时的锁与超时设置
scgi_store / scgi_store_access将 SCGI 响应保存为本地文件,并设置权限
scgi_temp_path临时文件存放目录及层级

上下文:大部分指令支持 http, server, location 级别;scgi_passscgi_param 还可出现在 if 块中。

三、常见配置示例

1. 关闭请求体缓冲,减少延迟

location /upload/ {include                scgi_params;scgi_pass              backend:9000;scgi_request_buffering off;scgi_read_timeout      60s;
}

2. 限制缓冲区大小,防止内存暴增

location /media/ {include           scgi_params;scgi_pass         media-server:9000;scgi_buffering    on;scgi_buffer_size  8k;scgi_buffers      4 16k;scgi_max_temp_file_size 50m;scgi_temp_path    /var/spool/nginx/scgi_temp 1 2;
}

3. 启用响应缓存

# 在 http{} 块中定义缓存
scgi_cache_path /data/nginx/scgi_cache levels=1:2 keys_zone=scgi_zone:20m inactive=30m max_size=10g;server {location /api/ {include            scgi_params;scgi_pass          api-backend:9000;scgi_cache         scgi_zone;scgi_cache_key     $scheme$host$request_uri;scgi_cache_valid   200 302 5m;scgi_cache_use_stale error timeout updating;scgi_cache_background_update on;scgi_cache_lock    on;}
}

四、性能与调优要点

  1. 缓冲 vs. 无缓冲

    • scgi_buffering off 可减少响应延迟,适用于流式或大文件;
    • on 时结合 scgi_buffers/scgi_max_temp_file_size 控制内存、磁盘使用。
  2. 超时设置

    • 合理设置 scgi_connect_timeoutscgi_read_timeoutscgi_send_timeout,防止后端长时间挂起连接。
  3. 缓存锁与并发填充

    • scgi_cache_lock on 可避免缓存风暴(多请求同时击穿);
    • scgi_cache_background_update on 让第一个请求回源更新缓存,其余快速返回旧值。
  4. 文件存储

    • scgi_store on 可将静态响应写盘,并通过 scgi_store_access 控制权限;
    • 配合 error_page,用于本地化缓存后端未命中资源。

通过以上配置与最佳实践,您可灵活地将 Nginx 与 SCGI 后端集成,兼顾性能、可靠性与扩展性。

相关文章:

  • 问题 | 代码审查:函数是否包含返回语句
  • 调研函模板可参考,以无人机职业技能调研为例
  • 开源表单设计器FcDesigner配置多语言教程
  • 2024年ASOC SCI2区TOP,多机制群优化算法+多风场输电线路巡检中多无人机任务分配与路径规划,深度解析+性能实测
  • Easy PLC和IT7000触摸屏的无实物仿真调试
  • Rust 学习笔记:关于错误处理的练习题
  • JavaScript 中的五种继承方式进行深入对比
  • 【T2I】LoCo: Locally Constrained Training-Free Layout-to-Image Synthesis
  • Docker 运维管理
  • ipynb文件的一键访问(顺带启动jupyter)实现程序演示
  • IDC数据中心动力环境监控系统解决方案
  • DAY 30 模块和库的导入
  • 230. 二叉搜索树中第 K 小的元素
  • DeepSeek在旅游行业的智能化革命
  • 【JUC】共享模型之无锁
  • 免费私有化部署! PawSQL社区版,超越EverSQL的企业级SQL优化工具面向个人开发者开放使用了
  • Linux系统添加路由
  • 免费开放试乘体验!苏州金龙自动驾驶巴士即将上线阳澄数谷
  • 产品构建设计的人性密码:从“假需求陷阱”到“人性博弈”,拆解售前翻车现场的底层逻辑
  • JDBC指南
  • 钱进已任外交部新闻司副司长
  • 人民日报评论员观察:稳企业,全力以赴纾困解难
  • 抖音开展“AI起号”专项治理,整治利用AI生成低俗猎奇视频等
  • 上海肺科医院院长陈昶:临床中的痛点,正是新技术诞生的起点
  • 深一度|上座率连创纪录撬动文旅,中超可否复制大连模式
  • 特朗普与普京通话前夕,英美法德意领导人通话讨论俄乌问题