对端在与上游进行 SSL 握手时,在 SSL 握手中关闭了连接

对端在与上游进行 SSL 握手时,在 SSL 握手中关闭了连接

我有以下流程 jmeter 并发 api 请求 -> magento-host-server -> magento-container

  1. 以下错误仅在测试团队的 apache jmeter 的并发请求被击中时发生。
  2. 并非所有 API 都会抛出此错误(只有此 API 会抛出错误 api/account/userprofile)
  3. 并非总是会出现错误,假设此错误发生的概率为 50%,错误率约为 30%,唯一的错误是 SSL 握手。
  4. 我无法在本地机器上重现此错误,该错误仅在测试团队的 jmeter 发出并发请求时发生。
  5. 出现此错误期间,服务器负载约为 CPU 使用率的 20-30%。
  6. 我在容器 apache 和应用程序日志中没有看到任何重要的错误日志

以下是 magento 应用程序容器运行的主机的 nginx 反向代理服务器配置

上游后端 {#添加用于负载测试
        服务器 127.0.0.1:8484;# 添加以进行负载测试
    } # 添加用于负载测试
    
    服务器 {
    
    listen 443 ssl; # 由 Certbot 管理
    
    服务器名称 magento.acc.abcd.eu;
    
    客户端最大主体大小10M;
    
    地点 / {
        代理密码 https://127.0.0.1:8484;
        proxy_ssl_name magento.acc.abcd.eu; # 添加以进行负载测试    
        proxy_ssl_server_name on;#添加用于负载测试
        代理缓冲区 16 16k;
            代理缓冲区大小32k;
        proxy_set_header 主机 $http_host;
        proxy_set_header X-真实IP $remote_addr;
        proxy_set_header X-Forwarded-对于 https;
        代理重定向关闭;
        proxy_set_header X-Forwarded-Proto $scheme;
        代理缓存关闭;
            代理请求缓冲关闭;
        代理SSL协议TLSv1 TLSv1.1 TLSv1.2;
    
        send_timeout 3600s;#为负载测试添加
        proxy_connect_timeout 3600s;#为负载测试添加
        proxy_read_timeout 3600s;#为负载测试添加
        memcached_connect_timeout 3600s;#为负载测试添加
        memcached_read_timeout 3600s;#为负载测试添加
        memcached_send_timeout 3600s;#为负载测试添加
    }
    
        访问日志/var/log/nginx/magento-access.log;
        错误日志/var/log/nginx/magento-error.log;
    
        ssl_certificate /etc/nginx/ssl/star_acc_abcd_eu_full_chain.crt; # 由 Certbot 管理
        ssl_certificate_key /etc/nginx/ssl/star_acc_abcd_eu.key; # 由 Certbot 管理
    
        ssl_会话_超时1d;
        ssl_session_cache 共享:MozSSL:10m;
        ssl_session_tickets关闭;
    
        # 中间配置
        ssl_协议TLSv1.2TLSv1.3;
        ssl_密码ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers开启;
        ssl_dhparam /etc/nginx/certs/abcd-dhparam.pem;
    }
    
    服务器 {
      听 [::]:80;
      听80;
      服务器名称 magento.acc.abcd.eu;
      返回 301 https://magento.acc.abcd.eu$request_uri;
    }

以下是 nginx 日志

    2023/12/18 07:15:01 [错误] 1639325#0:*159305 对等端在与上游进行 SSL 握手时在 SSL 握手中关闭了连接,客户端:12.12.12.12,服务器:magento.acc.abcd.eu,请求:“GET /nl/rest/all/V1/customers/search?searchCriteria%5BfilterGroups%5D%5B0%5D%5Bfilters%5D%5B0%5D%5Bfield%5D=email&searchCriteria%5BfilterGroups%5D%5B0%5D%5Bfilters%5D%5B0%5D%5Bvalue%5D=saritaumale%40abcdtestmail.com&searchCriteria%5BfilterGroups%5D%5B0%5D%5Bfilters%5D%5B0%5D%5BconditionType%5D=eq&searchCriteria%5BsortOrders%5D%5B0%5D%5Bfield%5D=email&searchCriteria%5BsortOrders%5D%5B0%5D%5Bdirection%5D=asc HTTP/1.1", 上游: “https://127.0.0.1:8484/nl/rest/all/V1/customers/search?searchCriteria%5BfilterGroups%5D%5B0%5D%5Bfilters%5D%5B0%5D%5Bfield%5D=email&searchCriteria%5BfilterGroups%5D%5B0%5D%5Bfilters%5D%5B0%5D%5Bvalue%5D=saritaumale%40abcdtestmail.com&searchCriteria%5BfilterGroups%5D%5B0%5D%5Bfilters%5D%5B0%5D%5BconditionType%5D=eq&searchCriteria%5BsortOrders%5D%5B0%5D%5Bfield%5D=email&searchCriteria%5BsortOrders%5D%5B0%5D%5Bdirection%5D=asc”,主机: “magento.acc.abcd.eu”

以下是 magento 容器 apache2 配置

小于号 VirtualHost *:443 大于号
    服务器名称 magento-ssl-proxy.acc.abcd.eu
    服务器别名 magento.acc.abcd.eu fairs-m2.acc.abcd.eu clubid-m2.acc.abcd.eu appstore-m2.acc.abcd.eu whitelabel-m2.acc.abcd.eu brochure-m2.acc.abcd.eu acsifreelife-m2.acc.abcd.eu checkoutflow-m2.acc.abcd.eu subscription-m2.acc.abcd.eu forms-m2.acc.abcd.eu

    标头始终设置 Strict-Transport-Security“max-age=31536000;includeSubDomains;preload”  
    标头始终设置 Referrer-Policy“strict-origin-when-cross-origin”
    标题始终设置权限策略“加速度计=(self),环境光传感器=(),自动播放=(),电池=(),摄像头=(),跨域隔离=(self),显示捕获=(),文档域=(self),加密媒体=(self),未渲染时执行=(self),视口外执行=(self),全屏=(self),地理位置=(self),陀螺仪=(),键盘地图=(self),磁力计=(),麦克风=(),midi=(),导航覆盖=(self),付款=(self),画中画=(self),公钥凭据获取=(self),屏幕唤醒锁定=(),同步xhr =(self),usb =(),web共享=(),xr空间跟踪=(),剪贴板读取=(self),剪贴板写入=(self),游戏手柄=(),扬声器选择=(),转换测量=()、无需用户激活的焦点=()、隐藏=()、空闲检测=()、兴趣群组=()、串行=()、同步脚本=()、信任令牌兑换=()、窗口放置=()、垂直滚动=()”

    SSLEngine 开启
    SSLCertificateFile“/usr/local/share/ca-certificates/star_acc_acsi_eu.crt”
    SSLCertificateKeyFile“/usr/local/share/ca-certificates/star_acc_acsi_eu.key”
    SSLCACertificateFile“/usr/local/share/ca-certificates/star_acc_acsi_eu.ca-bundle”

    ProxyPreserveHost 开启
    ProxyPass / http://127.0.0.1:80/ 连接超时=60 超时=1200 Keepalive=On
    
    # 添加用于负载测试
    超时 1200  
    代理超时 300
    # 添加用于负载测试
    
    RequestHeader 设置 X-Forwarded-Port “443”
    RequestHeader 设置 X-Forwarded-Proto "https"

    错误日志“logs/ssl-proxy-error.log”
    CustomLog“logs/ssl-proxy-access.log”代理

    CustomLog 日志/ssl_request_log“%t%h%{SSL_PROTOCOL}x%{SSL_CIPHER}x \“%r\”%b”
小于号/VirtualHost 大于号

下面是容器 apache2 日志,该日志是在主机 nginx 服务器端发生 SSL 握手错误后几秒生成的

[Tue Dec 19 06:32:47.463827 2023] [proxy_fcgi:error] [pid 268875] (70007)指定的超时已过期:[客户端 127.0.0.1:40270] AH01075:将请求发送到时出错:(轮询)
[Tue Dec 19 06:32:48.239519 2023] [proxy_fcgi:error] [pid 268508] (70007)指定的超时已过期:[客户端 127.0.0.1:40670] AH01075:将请求发送到时出错:(轮询)

我尝试了什么?

我尝试了以下配置中用 # 标记的所有选项,以进行负载测试

答案1

最有可能的是peer closed connection in SSL handshakeJMeter 方面的问题。

值得检查

相关内容