# Nginx 代理

由于 Strapi 不直接处理 SSL,并且在 "edge" 网络上托管 Node.js 服务不是一个安全的解决方案,因此建议您使用某种代理应用程序,例如 Nginx, Apache, HAProxy, Traefik 等。下面你会发现 Nginx 的一些示例配置,当然,这些配置可能不适合所有环境,你可能需要调整它们以满足您的需求。

# 配置

以下配置基于 Nginx 虚拟主机,这意味着您可以为每个域创建配置,以允许在同一端口(例如 80(HTTP)或 443(HTTPS)上为多个域提供服务。它还使用中央上游文件来存储别名,以便在群集多个 Strapi 部署时更轻松地进行管理、负载平衡和故障转移。

# Strapi 服务

为了充分利用代理的 Strapi 应用程序,应该配置 Strapi,使其能够识别上游代理。与以下配置一样,有3个匹配的示例。其他信息可以在 服务器配置管理配置 文档中找到。

✏️ NOTE

这些示例使用默认的 API 前缀 /api. 这可以更改,而无需直接修改 Nginx 配置 (请参阅 API prefix 文档).

✋ CAUTION

如果在 ./config/admin.js./config/server.js 文件中更改了 url 键,则需要使用 yarn buildnpm run build 重新构建管理面板。

# Nginx 上游

上游块用于将别名,如 strapi 映射到 localhost:1337。虽然在每个虚拟主机文件中定义这些文件会很有用,但如果您有多个虚拟主机文件,Nginx目前不支持在虚拟主机中加载这些内容。相反,请在 conf.d 目录中配置这些,因为这是在任何虚拟主机文件之前加载的。

在以下配置中,localhost:1337 映射到 Nginx 别名 strapi

# path: /etc/nginx/conf.d/upstream.conf

# Strapi server
upstream strapi {
    server 127.0.0.1:1337;
}

# Nginx 虚拟主机

虚拟主机文件用于存储特定应用、服务或代理服务的配置。为了与 Strapi 一起使用,此虚拟主机文件正在处理 HTTPS 连接,并将它们代理到服务器上本地运行的 Strapi。此配置还会使用 301 重定向将所有 HTTP 请求重定向到 HTTP。

在下面的示例中,您将需要替换您的域,同样,您需要根据放置 SSL 证书的位置进行更改,或者,如果您使用的是 Let's Encrypt,则需要根据脚本放置它们的位置进行更改。另请注意,虽然下面的路径显示 sites-available,但您需要将文件符号链接到 sites-enabled,以便 Nginx 启用配置。

以下是 Nginx 配置的 3 个示例:

  • 基于子域,如 api.example.com
  • 基于API和管理员在同一子文件夹,例如 example.com/test/apiexample.com/test/admin 上的子文件夹
  • 基于拆分API和管理员的子文件夹,例如 example.com/apiexample.com/dashboard

# 将主页重定向到管理面板

如果您不希望将默认的首页挂载在 / 上,则可以使用下面的示例代码创建自定义的 ./public/index.html,以自动重定向到您的管理面板。

✋ CAUTION

此示例配置要求可在 /admin 上访问管理面板。如果您使用上述配置之一将其更改为 /dashboard,则还需要调整此示例配置。

Path — ./public/index.html

<html>
  <head>
    <meta http-equiv="refresh" content="0;URL='/admin'" />
  </head>
</html>