Files
Genarrative/deploy/nginx

Genarrative Nginx compression policy

本配置片段由 scripts/jenkins-server-provision.sh 在安装 Nginx 站点配置时展开。

请求体大小

  • 生产、开发服和容器模板都在通用 location ~ ^/api(?:/|$) 内设置 client_max_body_size 64m
  • 该值只用于让携带参考图 Data URL 的创作接口抵达 api-server不要把它当作业务上传上限。Rust 路由仍通过 DefaultBodyLimit 和解码后字节校验限制具体接口,例如拼图参考图路由只放宽到 12 MiB 请求体,图片字节继续按业务规则拒绝。
  • 若线上看到 413 Request Entity Too Large,并且 access log 里 request_time=0.000 upstream_status=-,通常是 Nginx 没有加载该模板或未 reload先执行 nginx -T | grep client_max_body_sizenginx -t 再检查 api-server

gzip

  • deploy/nginx/genarrative.confdeploy/nginx/genarrative-dev-http.conf 默认开启 gzip。
  • 覆盖 application/json,用于降低 /api/runtime/*/gallery 这类 JSON 列表接口的公网带宽占用。
  • 当前推荐等级为 gzip_comp_level 5,兼顾 2C/2G 服务器 CPU 与压缩收益。

Brotli

  • Brotli 只在目标服务器 Nginx 接受 brotli 指令时开启。
  • Ubuntu / apt 系统的 Genarrative-Server-Provision 会安装 libnginx-mod-http-brotli-filterlibnginx-mod-http-brotli-static;非 apt 系统暂不自动安装,仍按下面的能力探测结果决定是否启用。
  • Provision 脚本通过临时配置执行 nginx -t 做能力探测;探测配置会先 include /etc/nginx/modules-enabled/*.conf,避免 Ubuntu 动态模块已安装但测试配置未加载模块导致误判。可用时把模板中的 # __GENARRATIVE_BROTLI_DIRECTIVES__ 替换为 brotli 指令,不可用时保留注释说明。
  • 不要直接在静态模板里无条件写 brotli on;,否则没有 brotli 模块的服务器会 nginx -t 失败并回滚。
  • 不要用 nginx -V | grep brotli 判断 brotli 是否可用Ubuntu apt 安装的 brotli 是动态模块,不会出现在普通编译参数里。应检查包、/etc/nginx/modules-enabled/load_module 配置,或用包含 include /etc/nginx/modules-enabled/*.conf 的临时配置执行 nginx -t

验证

dpkg -l 'libnginx-mod-http-brotli-*'
ls -l /etc/nginx/modules-enabled/*brotli*
nginx -T 2>/dev/null | grep -Ei 'brotli|load_module'

curl -sSI -H 'Accept-Encoding: gzip' \
  http://<host>/api/runtime/puzzle/gallery \
  | grep -iE 'content-encoding|vary|content-type|content-length'

curl -sSI -H 'Accept-Encoding: br' \
  http://<host>/api/runtime/puzzle/gallery \
  | grep -iE 'content-encoding|vary|content-type|content-length'

预期:

  • gzip 可用时返回 Content-Encoding: gzip
  • br 可用时返回 Content-Encoding: br
  • 响应头应包含 Vary: Accept-Encoding