Java High Level Rest Client创建VPC内OpenSearch索引报405错误
问题根因
405错误由NGINX配置错误直接导致,和VPC内OpenSearch服务本身无关,核心问题点如下:
- 你配置的
location ~ ^/$正则规则仅能匹配根路径/的请求,但创建索引的请求路径为/index-test-vpc?master_timeout=30s&timeout=30s,完全没有命中配置的反向代理规则 - 未命中匹配规则的请求会走NGINX默认处理逻辑,NGINX默认不允许对静态资源路径发起PUT类请求,因此直接在NGINX层返回了405响应,请求根本没有转发到后端OpenSearch域
- 额外隐藏配置问题:硬编码
proxy_method PUT会导致所有经过代理的请求都被强制改为PUT方法,后续GET查询、POST写入、DELETE删除等操作全部会异常;X-Forwarded-Proto配置多写了冒号属于语法错误;Host头传递EC2自身域名,会触发OpenSearch服务端的Host校验失败。
修复方案
- 调整location匹配规则,覆盖所有请求路径,而非仅匹配根路径
- 删除硬编码的
proxy_method PUT配置,透传客户端原始请求方法 - 修正请求头语法错误,将Host头改为后端OpenSearch的域名,避免服务端校验拦截
- 调整
proxy_pass写法,确保请求路径、参数能正确透传到后端
修正后的完整NGINX配置
server { listen 80; listen 443 ssl; server_name ec2xxx.compute-1.amazonaws.com; ssl_certificate /etc/nginx/cert.crt; ssl_certificate_key /etc/nginx/cert.key; ssl_protocols TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; # 匹配所有请求路径 location / { # 末尾加斜杠保证路径正确透传 proxy_pass https://vpc-xxx-instance.us-east-1.es.amazonaws.com/; proxy_redirect off; # 删除硬编码的请求方法配置,透传原始方法 proxy_http_version 1.1; proxy_set_header Content-Type "application/json"; # Host头传递OpenSearch域名,通过服务端校验 proxy_set_header Host vpc-xxx-instance.us-east-1.es.amazonaws.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $server_name; # 去掉多余冒号,修正配置语法 proxy_set_header X-Forwarded-Proto https; } }
配置生效操作
修改配置文件后依次执行以下命令校验并重载服务:
# 校验配置语法是否正确 nginx -t # 语法校验通过后重载配置生效 nginx -s reload
重载完成后重新发起创建索引请求即可正常转发到VPC内OpenSearch域,后续所有OpenSearch API操作也不会被强制限制为PUT方法。
内容的提问来源于stack exchange,提问作者Tarun Pande
相关产品推荐
相关产品推荐

