Magento2执行命令报错:OpenSearch 9200端口无有效SSL证书连接失败
可行解决方案
以下三种方案均经过实测验证,可根据自己的场景选择:
方案1:Docker环境变量禁用OpenSearch安全插件(本地开发环境首选,5分钟搞定)
不用进容器修改配置文件,直接调整docker-compose配置即可,解决之前找不到opensearch.yml的问题:
- 编辑docker-compose.yml中opensearch-node1节点的environment配置段,原有配置全部保留,追加两行配置:
environment: - cluster.name=opensearch-cluster - node.name=opensearch-node1 - discovery.seed_hosts=opensearch-node1,opensearch-node2 - cluster.initial_master_nodes=opensearch-node1,opensearch-node2 - bootstrap.memory_lock=true - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # 追加以下两行 - plugins.security.disabled=true - DISABLE_INSTALL_DEMO_CONFIG=true
- 执行
docker-compose up -d重建容器,等待10秒左右让服务完全启动。 - 修改Magento的app/etc/env.php中搜索引擎相关配置:
- 将
elasticsearch7_server_hostname的值从https://localhost改为localhost,去掉https前缀 - 将
elasticsearch7_enable_auth的值从1改为0 - 清空
elasticsearch7_username和elasticsearch7_password的字段值
- 将
- 执行
bin/magento cache:clean清理配置缓存,再执行reindex、setup:upgrade命令就不会报节点不存在的错误。
注意:该方案仅适用于本地开发环境,生产环境禁止禁用安全插件。
方案2:配置PHP信任OpenSearch自签名证书(需保留HTTPS和账号认证时使用)
如果不想禁用OpenSearch的安全认证能力,把OpenSearch的根证书加入PHP的信任链即可:
- 之前进容器找不到/usr/share/opensearch路径,是因为默认exec进入容器用的是低权限opensearch用户,执行以下命令用root身份进入容器就能看到完整路径:
docker exec -u 0 -it opensearch-node1 /bin/bash
- 退出容器,执行以下命令把OpenSearch内置的demo根证书导出到本地:
docker cp opensearch-node1:/usr/share/opensearch/config/root-ca.pem ./opensearch-root-ca.pem
- 执行
php -i | grep openssl.cafile查看当前PHP环境配置的CA证书路径:- 如果返回了具体的pem文件路径,直接把刚才导出的opensearch-root-ca.pem的全部内容追加到这个pem文件末尾
- 如果返回值为空,编辑本地PHP对应的php.ini文件,添加配置:
路径写本地存放CA证书的实际绝对路径,再把OpenSearch根证书内容追加到该pem文件中openssl.cafile="/etc/ssl/certs/cacert.pem"
- 执行
valet restart php重启PHP服务,用不带--insecure参数的curl命令访问9200端口验证,不再报证书错误即配置生效。此时Magento原有HTTPS+账号密码的配置不需要修改,可直接正常连接。
方案3:反向代理复用现有有效SSL证书
本地根域名已经配置了有效SSL证书,可以通过Valet反向代理给OpenSearch分配一个带有效证书的二级域名,绕过自签名证书问题:
- 执行Valet代理命令,给OpenSearch分配二级域名(域名可自定义):
valet proxy opensearch.test http://127.0.0.1:9200 --secure
--secure参数会自动给该域名配置Valet托管的有效SSL证书。
2. 修改Magento的env.php搜索引擎配置:
- 将
elasticsearch7_server_hostname的值改为opensearch.test,不要加https前缀 - 将
elasticsearch7_server_port的值改为443 - 原有认证相关的enable_auth、username、password配置保持不变
- 清理Magento缓存后即可正常连接,不需要修改OpenSearch和PHP的全局配置。
内容的提问来源于stack exchange,提问作者Jacob Flynn
相关产品推荐
相关产品推荐

