加载中

Using in Production

在生产环境中,**强烈建议**不要将 Elasticsearch 实例直接暴露给浏览器。而是通过您自己的后端服务器代理所有请求。

您有以下选项可安全地将 Elasticsearch 实例暴露给互联网

提示

这是**推荐**的方法,将在以下示例中使用。

这包括创建一个 API 路由,将搜索请求代理到 Elasticsearch。代理允许您

  • 在服务器上添加自定义标头或 API 密钥。
  • 应用过滤器以限制对特定文档的访问
  • 您自己的基于用户的 API 身份验证
  • 监控和记录搜索活动
  • 在 API 和 Elasticsearch 之间添加缓存层

在前端使用 ApiProxyConnector 将请求发送到您的后端,并在后端使用 ElasticsearchAPIConnector 将请求转发到 Elasticsearch。

您可以通过使用 API 密钥来限制对索引的访问。我们**建议**您创建一个仅限于特定索引且具有**只读**授权的 apiKey。请参阅 Kibana API 密钥指南。要使用 API 密钥,请将其放置在 Elasticsearch 连接配置中。

要通过服务器代理搜索请求,请使用 ApiProxyConnector。此连接器将搜索和自动完成请求发送到您的后端,并在后端执行实际的 Elasticsearch 查询。

import { ApiProxyConnector } from "@elastic/search-ui-elasticsearch-connector";

const connector = new ApiProxyConnector({
  basePath: "https://:3001/api"
  // fetchOptions: {}
});

const config = {
  apiConnector: connector
  // other Search UI config options
};
  1. ⚠️ 在生产环境中替换为您的服务器 URL
  2. 可选:如有需要,在此处添加标头或凭据

有关更多详细信息,请参阅 ApiProxyConnector

在您的后端,使用 ElasticsearchAPIConnector 处理请求,并传入来自客户端的请求正文

import express from "express";
import ElasticsearchAPIConnector from "@elastic/search-ui-elasticsearch-connector";

const app = express();
app.use(express.json());

const connector = new ElasticsearchAPIConnector({
  host: "https://your-elasticsearch-host",
  index: "your-index",
  apiKey: "your-api-key"
});

app.post("/api/search", async (req, res) => {
  const { state, queryConfig } = req.body;
  const response = await connector.onSearch(state, queryConfig);
  res.json(response);
});

app.post("/api/autocomplete", async (req, res) => {
  const { state, queryConfig } = req.body;
  const response = await connector.onAutocomplete(state, queryConfig);
  res.json(response);
});

app.listen(3001);
  1. ⚠️ 替换为您的 Elasticsearch 主机
  2. ✅ 使用与您的数据相同的索引
  3. 🔒 使用安全的、只读的 API 密钥
  4. { state: RequestState, queryConfig: QueryConfig } - 来自前端的 ApiProxyConnector

有关其他身份验证方法,请查看 Elasticsearch API 连接器参考

为了实现安全且可扩展的生产设置

  • 在前端使用 ApiProxyConnector
  • 在服务器上使用 ElasticsearchAPIConnector
  • **避免**将您的 Elasticsearch API 密钥暴露给浏览器。
  • 如有需要,请监控和记录。
提示

您可以在我们的 CodeSandbox 中探索使用此设置的**生产就绪**示例。

它演示了如何在客户端使用 ApiProxyConnector,并将搜索请求代理到使用 ElasticsearchAPIConnector 的后端。

© . This site is unofficial and not affiliated with Elasticsearch BV.