HAProxy 将流量重定向到 NGINX 出现错误“纯 HTTP 请求已发送到 HTTPS 端口”

for*_*own 2 ssl nginx haproxy

我们试图让 HAProxy 侦听来自端口 443(HTTPS 和 WSS)的所有传入流量

下面是我们的 HAProxy 配置:

frontend wwws
  bind 0.0.0.0:443 ssl crt /etc/haproxy/server.pem
  timeout client 1h
  default_backend www_backend

backend www_backend
  mode http
  stats enable
  stats uri /haproxy
  option forwardfor
  reqadd x-forwarded-proto:\ https

  server server1 backend:3000 weight 1 maxconn 8192 check
Run Code Online (Sandbox Code Playgroud)

0.0.0.0:443(例如https://example.com)是我们的 HA 代理服务器,它监听所有传入的 443 流量后端:3000 是我们的 nginx 服务器,它被设置为监听 SSL 连接

我们现在面临的当前问题是,当我们输入https://example.com 时,浏览器显示以下错误:

400 Bad Request
The plain HTTP request was sent to HTTPS port
nginx/1.7.5
Run Code Online (Sandbox Code Playgroud)

当 haproxy 将流量转发到 nginx(后端:3000)时,它似乎确实会转换为 http。

我认为“reqadd x-forwarded-proto:\ https”应该确保它是https。

不确定我们的 haproxy 配置有什么问题。

Lac*_*cek 9

将后端服务器规范更改为:

server server1 backend:3000 weight 1 maxconn 8192 check ssl verify none
Run Code Online (Sandbox Code Playgroud)

“ssl”部分定义后端使用 SSL,如果不存在,haproxy 将默认为普通 HTTP。“verify none”禁用证书检查,无论如何您可能不想对您的内部服务器执行此操作。