用 Unix Socket 而不是 127.0.0.1:端口因其绕过 TCP/IP 协议栈,减少三次握手、包头封装等开销,实测高并发短连接下吞吐量提升 20%–40%、延迟降 50% 以上。

为什么用 Unix Socket 而不是 127.0.0.1:端口
Unix 域套接字(UDS)绕过 TCP/IP 协议栈,没有三次握手、包头封装、校验与网络缓冲开销。实测在高并发短连接场景下,吞吐量可提升 20%–40%,延迟降低 50% 以上。尤其适合 Nginx 与本地进程(如 Gunicorn、Uvicorn、FastAPI、Node.js HTTP Server)共机部署的场景。
基础 proxy_pass + UDS 配置要点
必须使用完整协议前缀:http://unix:/path/to/app.sock(不能省略 http://);路径必须为绝对路径;socket 文件需已存在或由后端应用提前创建。
典型配置示例:
location / {
proxy_pass http://unix:/var/run/myapp.sock;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
启用 keepalive 连接复用(关键性能项)
默认情况下,Nginx 每次请求都新建并关闭 UDS 连接。开启 keepalive 后,worker 进程可复用已建立的 socket 连接,显著减少系统调用和上下文切换开销。
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
正确做法是配合 upstream 块声明,并设置 keepalive 指令:
upstream backend {
server unix:/var/run/myapp.sock;
keepalive 32;
}
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection '';
# 其他 header 保持不变
}
注意:keepalive 数值建议设为 16–64,过高可能占用过多文件描述符;proxy_http_version 1.1 和清空 Connection 头是启用 HTTP/1.1 长连接的必要条件。
权限与启动顺序避坑指南
Nginx worker 进程(如 www-data 或 nginx 用户)必须对 socket 文件及其**所有父目录**具备执行(x)权限 —— 否则无法进入目录或访问 socket。
- 检查 socket 是否存在且可访问:
sudo -u www-data ls -l /var/run/myapp.sock - 确保
/var/run对 Nginx 用户有 x 权限:ls -ld /var/run - 若后端服务启动慢于 Nginx,socket 尚未创建,会导致 502。推荐用 systemd 的
After=nginx.service或采用 socket 激活机制(systemd socket unit) - 避免将 socket 放在
/tmp下且含空格或中文名 —— Nginx 解析会失败


















