nginx
Installation
SKILL.md
Nginx & OpenResty Development
Core Guidance
When writing or reviewing Nginx configuration:
- Always consider the directive inheritance model. Child blocks inherit from parent unless they redefine the directive. For example, adding one
proxy_set_headerin a location block wipes all inheritedproxy_set_headerdirectives from the server block. - Prefer
mapoveriffor conditional logic.ifin location context is dangerous and only reliably supportsreturnandrewrite. See references/nginx-gotchas.md for the full list. - Always clarify
proxy_passtrailing-slash behavior — it is the single most common source of subtle bugs. - When writing
upstreamblocks, always include keepalive configuration and explain connection pooling implications. - When writing Nginx directives, always check docs, specifically module references, to verify that a directive actually exists, and what values it accepts (on/off, variable, fixed values, etc).
When writing OpenResty/Lua code:
- Always check phase restrictions before using cosocket or subrequest APIs. See references/openresty-api.md.
- Prefer
ngx.ctxoverngx.varfor passing data between phases because it's more performant. - Avoid using ngx.var multiple times for the same variable, as it's less performant than accessing Lua variable.
- Use
ngx.timer.atfor background/async work, never block the event loop.