scgi_params 是 Nginx 向 SCGI 后端传递请求环境变量的标准配置文件,由 scgi_param 指令组成,需配合 include 和 scgi_pass 使用,专用于 SCGI 协议,不可用于 proxy 或 fastcgi 场景。

scgi_params 是 Nginx 用来向 SCGI 后端应用传递请求环境变量的标准配置文件,核心作用是定义“传什么、怎么传”,不控制 Nginx 自身行为,而是确保上游 SCGI 程序(如 Python 的 scgi-server 或 uWSGI 的 SCGI 模式)能正确拿到请求上下文。
它本质是一组 scgi_param 指令的集合
SCGI 协议要求前端(Nginx)把请求元信息编码为 name\0value\0 字节流,并附上总长度。scgi_params 文件就是集中声明哪些变量要作为环境变量发送——每行都是一个 scgi_param key value; 语句,比如:
-
scgi_param REQUEST_METHOD $request_method;→ 把 HTTP 方法(GET/POST)传给后端 -
scgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;→ 告诉后端脚本的绝对路径,常用于定位入口文件 -
scgi_param HTTPS $https if_not_empty;→ 仅当启用了 HTTPS 时才发送该变量,避免空值干扰
必须配合 scgi_pass 和 include 才生效
这个文件本身不会自动起作用。你需要在 location 块中显式引入它,并搭配 scgi_pass 指令转发请求:
- 写法示例:
include scgi_params;(路径通常为/etc/nginx/scgi_params或相对 conf 目录) - 必须放在
scgi_pass之前,否则变量不参与编码 - 不能单独用在 proxy_pass 或 fastcgi_pass 场景下——那是
proxy_params或fastcgi_params的职责
和 fastcgi_params、uwsgi_params 是同类角色
它们分工明确,互不替代:
-
fastcgi_params:用于 FastCGI 协议(如 PHP-FPM) -
uwsgi_params:用于 uWSGI 协议(需 uWSGI 启用 uwsgi 模式) -
scgi_params:专用于 SCGI 协议,变量命名和语义与 SCGI 规范对齐,比如SCRIPT_NAME、PATH_INFO都是 SCGI 标准环境变量名
常见问题注意点
实际使用中容易出错的地方:
-
$document_root和$fastcgi_script_name的值依赖 location 匹配和重写逻辑,若没配好,SCRIPT_FILENAME可能指向错误路径 - 不要直接修改默认
scgi_params文件,建议复制一份自定义后再 include,避免升级覆盖 - 若后端报 “script not found” 或 “missing required env vars”,优先检查是否漏了
include scgi_params;或变量拼写错误(比如写成$fastcgi_script_name却没定义该变量)


















