e3258f6f1d
新增 Pingora shadow env 回切脚本与对应检查。 补齐直连证据包时间线和 cutoverRunId 审计门禁。 支持 Gitea Host 透传并更新直连多域名文档。 修复百分号编码静态图标路径并补 smoke 覆盖。 更新生产发布与运维护栏对 Pingora 发布包的校验。
82 lines
5.4 KiB
Bash
82 lines
5.4 KiB
Bash
# Pingora 独立网关试点配置示例。
|
||
# 当前只用于本机影子验证,不绑定 80/443,也不替代生产 Nginx。
|
||
# systemd 模板默认读取 /etc/genarrative/pingora-gateway.env。
|
||
|
||
GENARRATIVE_PINGORA_GATEWAY_LISTEN=127.0.0.1:18081
|
||
# 可选:直连 HTTPS 入口。默认关闭;启用时必须同时配置 cert/key,并把 FORWARDED_PROTO 设为 https。
|
||
# cert/key 必须允许 genarrative 用户读取;不要直接 chmod Let's Encrypt live/archive 原始目录。
|
||
# 可先用随包 scripts/deploy/pingora-tls-cert-sync.mjs 把证书同步到 /etc/genarrative/pingora-tls/<host>/。
|
||
# 80/443 必须先从 Nginx 或其它进程释放;高端口 loopback 演练可先使用 127.0.0.1:18443 / 127.0.0.1:18080。
|
||
# 如果要绑定 443/80,必须另行人工启用 systemd direct-entry drop-in 授予 CAP_NET_BIND_SERVICE。
|
||
# GENARRATIVE_PINGORA_GATEWAY_TLS_LISTEN=0.0.0.0:18443
|
||
# GENARRATIVE_PINGORA_GATEWAY_TLS_CERT_FILE=/etc/genarrative/pingora-tls/genarrative.world/fullchain.pem
|
||
# GENARRATIVE_PINGORA_GATEWAY_TLS_KEY_FILE=/etc/genarrative/pingora-tls/genarrative.world/privkey.pem
|
||
# 可选:直连 HTTP 只做 301 到 HTTPS;启用时必须已经配置 TLS_LISTEN,ACME challenge 仍从 ACME_ROOT 静态读取。
|
||
# GENARRATIVE_PINGORA_GATEWAY_HTTP_REDIRECT_LISTEN=0.0.0.0:18080
|
||
# GENARRATIVE_PINGORA_GATEWAY_HTTP_REDIRECT_TARGET_SCHEME=https
|
||
GENARRATIVE_PINGORA_GATEWAY_API_UPSTREAM=127.0.0.1:8082
|
||
GENARRATIVE_PINGORA_GATEWAY_SPACETIME_UPSTREAM=127.0.0.1:3101
|
||
# 可选:同一公网 IP 上还承载 Gitea 时,按 Host 整站转发到 Gitea。
|
||
# 命中这些 Host 的请求不走应用维护页、API body limit 或网关接流保护,避免影响 git clone / push。
|
||
# 直连 443 如果要同时服务这些域名,当前单 listener TLS 配置必须使用覆盖全部 Host 的同一张证书。
|
||
# GENARRATIVE_PINGORA_GATEWAY_GITEA_HOSTS=git.genarrative.world
|
||
# GENARRATIVE_PINGORA_GATEWAY_GITEA_UPSTREAM=127.0.0.1:3000
|
||
|
||
GENARRATIVE_PINGORA_GATEWAY_WEB_ROOT=/srv/genarrative/web
|
||
GENARRATIVE_PINGORA_GATEWAY_ACME_ROOT=/var/www/html
|
||
GENARRATIVE_PINGORA_GATEWAY_MAINTENANCE_FILE=/var/lib/genarrative/maintenance/enabled
|
||
|
||
GENARRATIVE_PINGORA_GATEWAY_FORWARDED_PROTO=http
|
||
GENARRATIVE_PINGORA_GATEWAY_MAX_API_BODY_BYTES=67108864
|
||
# gzip 默认开启;等级和最小响应长度对齐 Nginx gzip_comp_level 5 / gzip_min_length 1024。
|
||
# Pingora 正式化口径固定为 gzip-only;br / zstd 不进入当前网关,Brotli 继续由 Nginx / 前置代理承担。
|
||
GENARRATIVE_PINGORA_GATEWAY_COMPRESSION_ALGORITHMS=gzip
|
||
GENARRATIVE_PINGORA_GATEWAY_GZIP_ENABLED=true
|
||
GENARRATIVE_PINGORA_GATEWAY_GZIP_LEVEL=5
|
||
GENARRATIVE_PINGORA_GATEWAY_GZIP_MIN_LENGTH_BYTES=1024
|
||
|
||
# 静态响应缓存头:HTML / SPA fallback 保持 no-cache,Vite 指纹资源长缓存,其它静态资源保守 no-cache。
|
||
# 网关会额外写入 ETag / Last-Modified 并支持 304 协商缓存;下面三项只控制 Cache-Control。
|
||
GENARRATIVE_PINGORA_GATEWAY_HTML_CACHE_CONTROL=no-cache
|
||
GENARRATIVE_PINGORA_GATEWAY_ASSET_CACHE_CONTROL=public, max-age=31536000, immutable
|
||
GENARRATIVE_PINGORA_GATEWAY_STATIC_CACHE_CONTROL=no-cache
|
||
|
||
# 上游超时默认对齐当前 Nginx 模板:普通无显式长超时路由 60 秒,/api、公开列表/详情和 subscribe 为 3600 秒。
|
||
GENARRATIVE_PINGORA_GATEWAY_UPSTREAM_CONNECT_TIMEOUT_MS=3000
|
||
GENARRATIVE_PINGORA_GATEWAY_UPSTREAM_DEFAULT_READ_TIMEOUT_SECONDS=60
|
||
GENARRATIVE_PINGORA_GATEWAY_UPSTREAM_API_READ_TIMEOUT_SECONDS=3600
|
||
GENARRATIVE_PINGORA_GATEWAY_UPSTREAM_LONG_READ_TIMEOUT_SECONDS=3600
|
||
GENARRATIVE_PINGORA_GATEWAY_UPSTREAM_WRITE_TIMEOUT_SECONDS=3600
|
||
|
||
# 默认只信任 TCP 对端 IP;只有确认前置 Nginx / LB 会清洗 X-Forwarded-For 后才打开。
|
||
GENARRATIVE_PINGORA_GATEWAY_TRUST_X_FORWARDED_FOR=false
|
||
# 打开 TRUST_X_FORWARDED_FOR 前必须显式确认;否则网关会拒绝启动。
|
||
GENARRATIVE_PINGORA_GATEWAY_TRUSTED_FRONT_PROXY_CONFIRMED=false
|
||
|
||
# 单进程内接流保护;默认值对齐当前 Nginx limit_conn / limit_req 口径。
|
||
# INSTANCE_COUNT 默认 1;若横向运行多个 Pingora 实例且仍启用网关接流保护,必须先落地共享保护层并显式确认。
|
||
GENARRATIVE_PINGORA_GATEWAY_INSTANCE_COUNT=1
|
||
GENARRATIVE_PINGORA_GATEWAY_SHARED_PROTECTION_CONFIRMED=false
|
||
GENARRATIVE_PINGORA_GATEWAY_PROTECTION_ENABLED=true
|
||
GENARRATIVE_PINGORA_GATEWAY_ADMIN_API_MAX_CONCURRENT=64
|
||
GENARRATIVE_PINGORA_GATEWAY_ADMIN_API_RATE_PER_SECOND=30
|
||
GENARRATIVE_PINGORA_GATEWAY_ADMIN_API_BURST=16
|
||
GENARRATIVE_PINGORA_GATEWAY_GALLERY_LIST_MAX_CONCURRENT=320
|
||
GENARRATIVE_PINGORA_GATEWAY_GALLERY_LIST_RATE_PER_SECOND=5000
|
||
GENARRATIVE_PINGORA_GATEWAY_GALLERY_LIST_BURST=4096
|
||
GENARRATIVE_PINGORA_GATEWAY_GALLERY_DETAIL_MAX_CONCURRENT=32
|
||
GENARRATIVE_PINGORA_GATEWAY_GALLERY_DETAIL_RATE_PER_SECOND=300
|
||
GENARRATIVE_PINGORA_GATEWAY_GALLERY_DETAIL_BURST=32
|
||
GENARRATIVE_PINGORA_GATEWAY_API_MAX_CONCURRENT=64
|
||
GENARRATIVE_PINGORA_GATEWAY_API_RATE_PER_SECOND=300
|
||
GENARRATIVE_PINGORA_GATEWAY_API_BURST=64
|
||
GENARRATIVE_PINGORA_GATEWAY_SPACETIME_MAX_CONCURRENT=256
|
||
GENARRATIVE_PINGORA_GATEWAY_SPACETIME_RATE_PER_SECOND=1000
|
||
GENARRATIVE_PINGORA_GATEWAY_SPACETIME_BURST=256
|
||
# 仅供本机影子探针使用;为空时 /__genarrative_pingora/healthz 一律返回 404。
|
||
GENARRATIVE_PINGORA_GATEWAY_PROBE_TOKEN=
|
||
|
||
GENARRATIVE_PINGORA_GATEWAY_LOG=info,pingora=info,pingora_gateway=info
|
||
GENARRATIVE_PINGORA_GATEWAY_ACCESS_LOG_FILE=/var/log/genarrative/pingora-gateway.access.log
|
||
GENARRATIVE_PINGORA_GATEWAY_OTEL_ENABLED=false
|