You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu环境下通过NGINX反向代理写入Elasticsearch 8失败

解决方案

1. 确认Nginx证书链配置完整

仅配置服务器证书会导致证书链不完整,Ubuntu根证书池无法完成验证。检查并修改Nginx的SSL配置:

server {
    # 保留原有其他配置
    ssl_certificate /path/to/fullchain.pem;  # 必须包含服务器证书+中间CA证书的链式文件
    ssl_certificate_key /path/to/privkey.pem;
    # 保留原有其他SSL配置
}

修改后重启Nginx:

sudo systemctl restart nginx

2. 让Ubuntu系统信任证书根CA

若Nginx使用的证书根CA不在Ubuntu默认根证书池中,手动添加:

  • 将根CA证书文件(如root_ca.crt)复制到/usr/local/share/ca-certificates/目录
  • 执行更新命令:
sudo update-ca-certificates

3. 统一Python与系统的证书池

Ubuntu下Python默认可能使用certifi库自带的证书池,和系统证书池不一致,可通过以下方式对齐:

方法A:设置环境变量

运行Python脚本前执行:

export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt

或在Python代码开头添加:

import os
os.environ['SSL_CERT_FILE'] = '/etc/ssl/certs/ca-certificates.crt'

方法B:更新certifi证书池

将系统根证书合并到certifi的证书文件中:

cat /etc/ssl/certs/ca-certificates.crt >> $(python3 -c "import certifi; print(certifi.where())")

4. 代码中显式指定CA证书

若不想修改系统或环境变量,可在Elasticsearch客户端初始化时直接指定根CA路径:

from elasticsearch import Elasticsearch

es = Elasticsearch(
    "https://example.com/myelasticsearch",
    verify_certs=True,
    ca_certs="/path/to/root_ca.crt"  # 替换为你的根CA证书实际路径
)

5. 检查SNI配置(可选)

确保Nginx的server_name字段与请求域名example.com一致,若使用自定义SSL上下文,需确认开启SNI:

import ssl
from elasticsearch import Elasticsearch

context = ssl.create_default_context()
context.check_hostname = True
context.verify_mode = ssl.CERT_REQUIRED

es = Elasticsearch(
    "https://example.com/myelasticsearch",
    ssl_context=context
)

内容的提问来源于stack exchange,提问作者Aj_ruba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:37:49