1.15.10 — A node can serve a classic vhost and the edge plane at once
Editorial identity incomplete
2026-08-20
The rendered http base declared the $connection_upgrade map, which made a hybrid node impossible: one that serves a classic conf.d vhost alongside the edge plane has to declare that map itself, because the vhost proxies through asgi.inc and references it before any generation exists. Declared in both places it is a duplicate-directive [emerg]; declared only by the generation, a fresh box cannot start nginx until it has converged and cannot converge without serving. The map now belongs to the node bootstrap, joining default_type and types_hash_max_size in a split this design already had.
Breaking
http.d/00_base.confno longer rendersmap $http_upgrade $connection_upgrade. A node whosenginx.confdoes not declare that map will failnginx -tafter upgrading. Every django-mojo-skeleton node already declares it. See Upgrade notes.
Changed
- The rendered http base still owns everything the generated vhosts alone depend on — the mime include,
log_format main,$loggable,access_log, and the blocklist maps every 443 block references unconditionally. Only the upgrade map moved.
Upgrade notes
Confirm your node bootstrap declares the map before upgrading:
map $http_upgrade $connection_upgrade { default upgrade; '' close; }
It belongs in the
http { }block of/etc/nginx/nginx.conf, next todefault_typeandtypes_hash_max_size. A fleet whose edge plane serves every host and carries noconf.dvhost of its own needs it too — the generated vhosts reference it on every proxied location.docs/django_developer/edge/templates.mdcarries the full include graph and the bootstrap this expects.