当 Nginx 在 HAProxy 后面使用 unix 套接字时出现“常规套接字错误”

当 Nginx 在 HAProxy 后面使用 unix 套接字时出现“常规套接字错误”

出于性能原因,我在 nginx 前面使用 HAProxy,而且我似乎无法使用 unix 套接字进行 HAProxy 和 Nginx 之间的通信。

HAProxy 配置:

backend nginx                                                                                                     
  option forwardfor                                                                                              
  option http-server-close                                                                                        
  server nginx_unix /var/run/nginx-webhook.sock check send-proxy

Nginx 配置:

server {                                                                                                         
  listen 8080 proxy_protocol;                                                                                   
  listen unix:/var/run/nginx-webhook.sock proxy_protocol;
  ...
}

套接字确实存在:

$ ls -lah /var/run/nginx-webhook.sock                                                                               
srw-rw-rw- 1 root root 0 Feb  7 19:29 /var/run/nginx-webhook.sock

这是我从 HAProxy 状态页面得到的错误:

HAProxy 状态页面截图

Mar 17 14:38:42 app01 haproxy[11597]: Server nginx/nginx_unix is DOWN, reason: Socket error, info: "General socket│
 error (No such file or directory)", check duration: 0ms. 1 active and 0 backup servers left. 0 sessions active, 0│
 requeued, 0 remaining in queue.

不知道出了什么问题;插座终究是存在。

答案1

我也遇到了同样的问题Haproxy 1.8.19Debian 破坏者Varnish 6.0.3作为后端。

对我来说,问题来自于chrootHaproxy 配置中的选项:

chroot /var/lib/haproxy

有两种方法可以解决此问题:

  • 将你的 Nginx Unix 套接字移至 chroot 目录中

  • 或者禁用 chroot 选项,但出于安全原因不建议这样做。

答案2

将套接字放入 haproxy chroot 后,您需要提及带有地址族前缀的不带“/”的套接字名称。

server nginx_unix "[email protected]" check

确保权限也正确。

相关内容