我正在尝试配置 Haproxy 在公共端口 443 上运行并将 TCP 流量发送到正确的位置,如下所示:
- 2 个 Nginx 实例,带 SSL 终端。流量路由器根据主机名进行路由。所有网络流量均通过 HTTPS 进行传输。
- OpenVPN
- OpenSSH
我认为我的配置非常接近,但不知何故我无法使其工作。我的网络请求只是超时。
我究竟做错了什么?
global
log /dev/log local0 debug # TURN OFF DEBUG!
log /dev/log local1 notice
#log loghost local0 info
maxconn 1024
defaults
log global
mode http
option httplog
option dontlognull
option tcplog
retries 3
option redispatch
maxconn 2000
timeout connect 5000
timeout client 50000
timeout server 50000
listen HAProxy-Statistics
bind *:1936
mode http
option httplog
option httpclose
stats enable
stats uri /
stats refresh 10s
stats show-node
stats show-legends
stats show-desc Haproxy Frontend
stats auth admin:admin
frontend ssl_relay
bind 0.0.0.0:443 name frontend-ssl
mode tcp
option tcplog
option socket-stats
# option nolinger
maxconn 300
log /dev/log local0 debug # overkill! turn this off when not needed
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend https_one if { req_ssl_sni -i home.example.com }
use_backend https_two if { req_ssl_sni -i nc.example.com }
use_backend openvpn if !{ req.len 0 }
use_backend openssh if { req.len 0 }
default_backend https_one
backend https_one
mode tcp
server home-https-server 10.0.0.4:4443 send-proxy
backend https_two
mode tcp
server nc-https-server 10.0.0.4:4444 send-proxy
backend openvpn
mode tcp
server openvpn-server 10.0.0.4:1194
backend openssh
mode tcp
server openssh-server 10.0.0.5:22
答案1
说到 OpenVPN,我得出的结论是:把它抛在后面是适得其反的。
- 您将不会拥有永久会话,并且如果后端死亡并且您已连接到该后端,则您仍然需要重新连接。
- OpenVPN带有一个易于使用的负载平衡/故障转移选项(我不确定当一台服务器发生故障时它是否会自动重新连接):
remote server1.mydomain
remote server2.mydomain
remote server3.mydomain
remote-random
- HAProxy 强制您使用 TCP 而不是 UDP,这意味着您需要进行两次数据包握手:针对隧道,以及针对隧道中封装的包。