amazon-web-services - 为什么在 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 文档对此进行了解释。
解决方案
要设置自定义 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
是一个异步函数,它期望返回一个数组,其中包含具有source
和headers
属性的对象:
source
是传入请求路径模式。
headers
是具有key
和value
属性的标头对象数组。
推荐阅读
- java - 为找不到资源创建自定义异常 404 SPRING BOOT
- mysql - Nodejs/Express Ajax 调用 MySQL
- php - 将实体与模型分开或将它们保留为一个类 (SpotORM)
- sqlite - SQLite - 浮动粒度打破了独特的约束?
- html - 修复了具有许多 tbody 的可滚动 div 中的表头
- scala - Scala中的IntelliJ要求在继承自具体类的类中实现抽象成员
- python-3.x - 使用 Python3 easysnmp 模块时未翻译 SNMP sysObjectID
- python - matplotlib 中营业时间内的时间序列连续图
- qt - QML mapToGlobal() 相对于屏幕或应用程序窗口
- ruby-on-rails - 我可以直接查询连接表以获取关联的“created_at”日期吗?