[英]Enable trust proxy on Next.js
在 Express.js 上,你可以
// see https://expressjs.com/en/guide/behind-proxies.html
app.set('trust proxy', 1);
我正在尝试添加一个速率限制,它是一个 Express 中间件,它支持 Next.js,但我需要在我的 Next.js 应用程序上允许代理。 我试过谷歌搜索,但没有发现任何有用的东西。
Express.js信任代理设置req.protocol
以匹配X-Forwarded-Proto
header(参见源代码)。 据我所知 Next.js 没有类似的信任代理设置。 另外当前(v12.2)Next.JS版本的中间件不允许修改请求object,因此无法创建自定义信任代理中间件。
一种解决方案是围绕 Express 中间件创建一个包装器。 此包装器在将protocol
属性传递给 Express 中间件之前将其添加到请求中,并且添加的属性应该足以让 ratelimit 中间件知道它位于安全连接的后面。
// middleware.js
import { NextResponse } from 'next/server';
export async function middleware(req) {
const res = NextResponse.next();
req.protocol = req.headers['x-forwarded-proto'] ?? 'http';
await runExpressMiddleware(req, res, exampleMiddleware);
return res;
}
function runExpressMiddleware(req, res, middlewareFn) {
return new Promise((resolve, reject) => {
middlewareFn(req, res, (result) => {
if (result instanceof Error) {
return reject(result);
}
return resolve(result);
});
});
}
function exampleMiddleware(req, res, next) {
console.log(req.protocol); // Value of x-forwarded-proto header or http
next();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.