首页 > 解决方案 > 为什么在 Next.js 中发出请求时会有不同的主机头?

问题描述

我在 Docker 容器内的 Elastic Beanstalk 中的 Amazon Web Services 上托管我的 Next.js 应用程序。我最近通过从 Express.js 打印注意到req.host,每当发送请求以/_next*路由主机时,都是myid.elasticebeanstalk.com. 在所有其他请求中(例如,对于实际页面或对 API 服务器的请求),主机example.com既是客户端又是服务器端(假设我的应用程序托管在该地址)。

我想知道为什么会这样?如何将主机标头设置为/_next*路由example.com?我怀疑有时这可能会导致 SSL 错误,因为主机将不正确。

弹性 beanstalk 配置是单实例。DNS 记录在 AWS Route 53 中配置。带有的主机标头myid.elasticebeanstalk.com仅出现在服务器端请求中。example.com是 CNAME,而不是别名。日志是在 docker 容器内制作的。一般来说,我认为 SSL 证书是由 Cloudfront 中的 AWS 提供的。

编辑:看起来主机名应该在 Elastic Beanstalk 的主机操作系统中设置,应该是 Linux。此AWS 文档对此进行了解释。

标签: amazon-web-servicesdockerhttp-headersnext.jshttp-host

解决方案


要设置自定义 HTTP 标头,您可以使用 next.config.js 中的 headers 键:

module.exports = {
  async headers() {
    return [
      {
        source: '/about',
        headers: [
          {
            key: 'x-custom-header',
            value: 'my custom header value',
          },
          {
            key: 'x-another-custom-header',
            value: 'my other custom header value',
          },
        ],
      },
    ]
  },
}

headers是一个异步函数,它期望返回一个数组,其中包含具有sourceheaders属性的对象:

source是传入请求路径模式。

headers是具有keyvalue属性的标头对象数组。


推荐阅读