实战:一次“诡异” 的 Nginx 异常排查,真相竟不是证书问题?

💡 原文中文,约4900字,阅读约需12分钟。
📝

内容提要

在添加HTTPS证书后,通过curl请求时出现连接重置问题。经过排查,发现ssl_session_cache参数的设置影响请求成功,调整后问题解决。

🎯

关键要点

  • 网站上线后添加HTTPS证书,curl请求出现连接重置问题。
  • 通过curl请求HTTP和其他HTTPS域名,发现网络正常。
  • 检查证书未到期,怀疑加密套件配置,尝试添加兼容性更高的加密套件无果。
  • 使用tcpdump和wireshark抓包分析,发现数据传输的确认包被重置。
  • 修改nginx的client相关设置后问题依旧,尝试更换证书为ECC证书。
  • 更换证书后出现新的错误,怀疑ECC算法兼容性问题。
  • 了解到Redhat/CentOS上curl默认禁用ECC加密,需指定加密套件。
  • 对比其他网站的nginx配置,发现ssl_session_cache参数未配置,尝试添加该参数。
  • 添加ssl_session_cache参数后问题解决,curl请求不再报错。
  • ssl_session_cache参数有四个可选设置,建议使用shared以提高性能。
  • 分析发现ssl_session_cache影响curl请求的原因仍不明确,期待他人解答。
  • 列举常见nginx日志中的错误信息及其含义,帮助排查问题。
  • tcpdump抓包可用,分析需用wireshark,ECC证书推荐使用。

延伸问答

为什么在添加HTTPS证书后curl请求会出现连接重置问题?

连接重置问题可能与ssl_session_cache参数的设置有关,经过调整后问题得到解决。

如何排查Nginx的连接重置问题?

可以通过tcpdump抓包和wireshark分析数据传输,检查握手和确认包的状态。

ssl_session_cache参数的作用是什么?

ssl_session_cache用于优化SSL连接,缓存会话以减少握手次数,提高性能。

更换ECC证书后出现的错误是什么?

更换ECC证书后出现的错误是无法与对等体安全通信,提示无通用加密算法。

如何解决curl请求的连接重置问题?

可以尝试添加ssl_session_cache参数,并设置为shared以提高性能,通常能解决问题。

tcpdump和wireshark的使用有什么区别?

tcpdump用于抓包,而wireshark用于分析抓取的数据包,提供更详细的信息。

➡️

继续阅读