1. 日常日志
[2024-05-23T09:45:03,336][WARN ][o.e.h.n.Netty4HttpServerTransport] [DESKTOP-6GQSTBC] received plaintext http traffic on an https channel, closing connection Netty4HttpChannel{localAddress=/[0:0:0:0:0:0:0:1]:9200, remoteAddress=/[0:0:0:0:0:0:0:1]:63881} [2024-05-23T10:06:12,670][WARN ][o.e.h.n.Netty4HttpServerTransport] [DESKTOP-6GQSTBC] received plaintext http traffic on an https channel, closing connection Netty4HttpChannel{localAddress=/[0:0:0:0:0:0:0:1]:9200, remoteAddress=/[0:0:0:0:0:0:0:1]:50163}
2. 原因分析
这两条日志的关键信息如下:
- 日志级别为WARN,表示有异常情况
- 日志来自o.e.h.n.Netty4HttpServerTransport,即Elasticsearch的HTTP服务器组件
- 日志内容提示"
received plaintext http traffic on an https channel
",即在HTTPS通道上接收到了明文HTTP流量 - Elasticsearch的应对措施是"closing connection",即关闭了这个连接
所以可以判断,Elasticsearch服务器期望客户端使用HTTPS发送请求,但实际收到的是明文HTTP请求,因此拒绝了这些请求。
同时日志中也提到了请求的源地址和目标地址,这里都是[0:0:0:0:0:0:0:1],即IPv6环回地址,相当于IPv4的127.0.0.1,表示请求来自本机。目标端口为9200,即Elasticsearch的默认端口。
3. 如何处理
3.1 方案1:使用HTTPS请求(√)
使用HTTPS协议访问Elasticsearch而不是HTTP。
例如你向创建一个名为test_index
的索引,之前你PUT访问的是
http://localhost:9200/test_index
,现在将设你如将请求的URL改为https://localhost:9200/test_index
,并确保Elasticsearch配置了正确的SSL证书。开发环境下可以直接请求。
3.2 方案2:启用HTTP
默认只能用HTTPS。将Elasticsearch配置为允许HTTP明文通信。可以在elasticsearch.yml
配置文件中添加以下内容来启用HTTP:
http.port: 9200
找到该位置取消注释即可:
3.2 方案3:设置允许HTTP明文通信(×不推荐)
或者,如果你是在本地开发环境中使用Elasticsearch,也可以考虑禁用SSL以方便使用。这通常很没必要,就算你实在不想用HTTPS请求,你启动HTTP就可以了,而不是禁用SSL。可以在elasticsearch.yml
中添加以下配置:
xpack.security.http.ssl: enabled: false ... xpack.security.transport.ssl: enabled: false ...
这两种修改配置的方式,需要在修改后重启Elasticsearch服务。不过一帮这样配置只适合开发环境,生产环境中还是要启用SSL以保证安全。