繁体   English   中英

在 Next.js 上启用信任代理

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM