一、基本情况说明
Elasticsearch 7.6.1 和 nginx 使用 docker 安装。
https 访问,使用阿里云的免费证书。
nginx 配置文件中将所有 HTTP 请求通过 rewrite 指令重定向为 HTTPS 访问。
二、出现的问题
1)没有给 Elasticsearch 作任何 https 访问配置的情况下
前端使用 Elasticsearch 搜索功能,检索结果准确,服务器 docker Elasticsearch 容器报以下错误:
{"type": "server", "timestamp": "2024-01-24T10:31:44,051Z", "level": "ERROR", "component": "o.w.a.d.Monitor", "cluster.name": "elasticsearch", "node.name": "d7c3518959ef", "message": "remote_ext_dict javax.net.ssl.SSLPeerUnverifiedException: Host name 'IP地址' does not match the certificate subject provided by the peer (CN=域名) error!", "cluster.uuid": "mCtcfT2QS8O80kUM0RU9Bg", "node.id": "rk0Ld6e3Q52JUY2fAUFCYw" }
2)给 Elasticsearch 配置 https 访问的情况下还是报上面的错误。
我的配置如下:
1、启动 es 容器的命令
docker run –name es2 -p 9200:9200 -p 9300:9300
-e “discovery.type=single-node”
-e ES_JAVA_OPTS=”-Xms2g -Xmx2g”
-v /opt/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
-v /opt/nginx/cert/xxxxxx.key:/usr/share/elasticsearch/config/xxxxxx.key
-v /opt/nginx/cert/xxxxxx.pem:/usr/share/elasticsearch/config/xxxxxx.pem
-v /opt/elasticsearch/data:/usr/share/elasticsearch/data
-v /opt/elasticsearch/plugins:/usr/share/elasticsearch/plugins
–restart=always
-d elasticsearch:7.6.1
2、 ES 配置文件 elasticsearch.yml
根据报错提示,将 key 和 pem 配置为 es 容器启动时文件挂载的路径
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.key: /usr/share/elasticsearch/config/xxxxxx.key
xpack.security.transport.ssl.certificate: /usr/share/elasticsearch/config/xxxxxx.pem
xpack.security.transport.ssl.certificate_authorities: [ "/usr/share/elasticsearch/config/xxxxxx.pem"]
3、nginx 配置文件(不会正确配置,尝试配置如下)
server {
listen 80;
#server_name localhost;
server_name 域名;
rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
location / {
root html;
index index.html index.htm;
}
}
#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
listen 443 ssl;
server_name 域名;
root html;
index index.html index.htm;
ssl_certificate cert/xxxxxx.pem; # 证书文件的名称。
ssl_certificate_key cert/xxxxxx.key; # 证书私钥文件的名称。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host:$server_port;
proxy_pass http://IP地址:3000; # 代理到前端服务
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
error_page 404 /404x.html;
location = /404x.html {
root /usr/share/nginx/html;
}
}
server {
listen 9200 ssl;
server_name 域名;
ssl_certificate cert/xxxxxx.pem; # 证书文件的名称。
ssl_certificate_key cert/xxxxxx.key; #证书私钥文件的名称。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
location / {
#proxy_pass http://域名:9200; # 尝试过通过域名代理到 es 端口,报同样的错
proxy_pass IP 地址:9200; # 代理 es 端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
以上就是我目前的情况。
网搜的方法 Elasticsearch 和 nginx 不是用 docker 安装的,版本不同;https 访问不是用阿里云的,配置不同,所以我一直没能解决这个 bug,望大佬赐教,助我早日解除这个困扰了我许久的问题。
没有回复内容