仅限本地 Apache 流量的 Haproxy SSL 握手错误

仅限本地 Apache 流量的 Haproxy SSL 握手错误

我目前在服务器 1(端口 80 和 443)上使用 apache(Ubuntu),它有多个域名和一个通配符 SSL 证书。目前一切运行正常。

我想在服务器 1 上设置 haproxy,将发往 domain_name_1 的流量路由到服务器 2(该服务器没有 SSL 证书),并且所有发往其他 domain_name 的流量都应从 haproxy 转发到服务器上的 apache1我做了各种更改,例如在服务器 1 上安装 haproxy 并使其监听端口 80 和 443,将服务器 1 上的 apache 更改为监听新端口(8888 和 9999),但仍然出现以下问题:

domain_name_1 的流量已正确发送到服务器 2,SSL 也正常工作。问题在于,所有其他应发送到服务器 1 上的 apache 的域都返回了 Web 浏览器错误 503,查看 haproxy 日志时,我发现了许多 SSL 握手错误。

我读到过一些文章说可能是 SSL 证书问题、haproxy sni 问题或 Apache 配置文件问题,但我真的很困惑,过去几天一直在苦恼。

这是我现在的haproxy 配置,看起来还好吗?

*

global
    log /dev/log local0
    log /dev/log local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon
    tune.ssl.default-dh-param 2048

    # Default SSL material locations
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

    # SSL settings
    ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE->
    ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
    ssl-default-bind-options ssl-min-ver TLSv1.0 no-tls-tickets

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http
    
# Frontend settings
frontend http-in
    bind *:80
    mode http
    acl is_theysback hdr(host) -i domain_name_1.com
    use_backend theysback_backend if is_theysback
    default_backend apache_backend

frontend https-in
    bind *:443 ssl crt /etc/webmin/letsencrypt-fullnew.pem
    acl is_theysback hdr(host) -i domain_name_1.com
    use_backend theysback_backend if is_theysback
    default_backend apache_backend_ssl

# Backends - IP of SERVER 2
backend theysback_backend
    server server2 77.88.99.66:80 check

backend apache_backend
    server apache1 localhost:8888

backend apache_backend_ssl
    server apache1 localhost:9999 ssl ca-file /etc/webmin/letsencrypt-ca.pem
    

######################################################

在上面的配置中我使用这个 crt 进行 ssl 绑定:

/etc/webmin/letsencrypt-fullnew.pem

创建方式如下:

sudo cat /etc/webmin/letsencrypt-ca.pem /etc/webmin/letsencrypt-cert.pem /etc/webmin/letsencrypt-key.pem > /etc/webmin/letsencrypt-fullnew.pem

里面有:

-----开始证书----- ......... -----结束证书----- -----开始证书----- ......... -----结束证书----- -----开始证书----- ......... -----结束证书----- -----开始证书----- ......... -----结束证书----- -----开始私钥----- ......... -----结束私钥-----

######################################################

存在问题的域的 apache 配置(503 SSL 握手错误):

已启用站点的域-1-应该停留在服务器-1 上,并已发送到 APACHE.conf

<VirtualHost *:8888>
    ServerAdmin admin@domain_name_2.com
    ServerName domain_name_1.com
    ServerAlias www.domain_name_1.com

    DocumentRoot /var/www/theysback/public_html

    <Directory /var/www/theysback/public_html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 
    
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =domain_name_1.com [OR]
    RewriteCond %{SERVER_NAME} =www.domain_name_1.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

站点已启用域-2-应该停留在服务器-1 上-已发送到 APACHE.conf

<IfModule mod_ssl.c>
     <VirtualHost *:9999>
    ServerAdmin admin@domain_name_2.com
    ServerName domain_name_2.com

        DocumentRoot /var/www/theysbacksubdomain/public_html

        <Directory /var/www/theysbacksubdomain/public_html>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log 
        CustomLog ${APACHE_LOG_DIR}/access.log combined 
        
        SSLEngine on
        SSLCertificateFile /etc/webmin/letsencrypt-cert.pem
        SSLCertificateKeyFile /etc/webmin/letsencrypt-key.pem
        SSLCACertificateFile /etc/webmin/letsencrypt-ca.pem

        # IP of SERVER 1
        ProxyPreserveHost On
        ProxyPass / http://44.22.99.33:7000/
        ProxyPassReverse / http://44.22.99.33:7000/
        #

    </VirtualHost>

    <VirtualHost *:8888>
        DocumentRoot /var/www/theysbacksubdomain/public_html
        ServerName domain_name_2.com
        <Directory /var/www/theysbacksubdomain/public_html>
            Options None
            Require all granted
        </Directory>

        RewriteEngine on
        RewriteCond %{SERVER_NAME} =domain_name_2.com
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    </VirtualHost>
    
</IfModule>

任何建议都非常欢迎

相关内容