nginx反向代理支持unix domain socket(uds),配置必须严格使用绝对路径格式unix:/run/myapp.sock,禁止加http://或端口;需确保socket文件权限正确、位于/run/等可访问目录,并配合健康检查与合理启停顺序避免502错误。

Unix Domain Socket 能显著降低单机反向代理的延迟和系统开销,但配置错一个字符就会 502。
proxy_pass 指向 Unix Socket 的写法必须严格符合规范
Nginx 不接受 http://unix:/path/to.sock 或 unix:/path/to.sock:8080 这类写法。它只认 unix:/absolute/path.sock 这一种格式,且必须是绝对路径、不能带协议头、不能带端口。
-
proxy_pass后面直接跟unix:/run/myapp.sock,前面绝不能加http:// - 路径必须以
/开头,比如/run/可以,./sock.sock或sock.sock会报invalid URL prefix - 如果 upstream 块里用了
server unix:/run/app.sock,那proxy_pass就只能写成http://backend,不能混用
socket 文件权限和位置直接影响 Nginx 是否能连上
Nginx worker 进程是以指定用户(如 www-data 或 nginx)身份运行的,它必须对 socket 文件有读写权限,否则日志里只会显示模糊的 connect() failed (111: Connection refused) while connecting to upstream。
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
- 推荐把 socket 放在
/run/下(tmpfs 内存文件系统),比如/run/myapp.sock,避免磁盘 I/O 和被系统清理 - 启动后端服务时,显式设置 socket 权限,例如 Gunicorn 启动命令加
--umask 007 --chmod-socket=660 - 确保 Nginx 用户属于 socket 所属组,或直接用
chown nginx:nginx /run/myapp.sock
upstream 中使用 Unix Socket 时要注意健康检查兼容性
max_fails 和 fail_timeout 在 Unix Socket 场景下仍有效,但 Nginx 默认不会主动探测 socket 是否可写——它只在真正发起连接时才失败。这意味着宕机后首次请求仍会卡住,直到超时。
- 不要依赖
proxy_next_upstream error timeout自动跳过故障 socket;它只在连接建立失败后生效,不覆盖 accept 阶段阻塞 - 若后端是常驻进程(如 uWSGI/Gunicorn),建议配合
health_check指令(需 1.11.5+)或外部脚本定期 touch socket 文件 - 避免在
upstream里混用 TCP 和 Unix Socket server,Nginx 不支持跨类型负载均衡
最容易被忽略的是:Nginx reload 不会自动重建与 Unix Socket 的连接状态,后端重启后必须手动触发一次 nginx -s reload 或确保后端先于 Nginx 启动。否则第一个请求永远卡在 connect 等待,直到超时返回 502。










