【发布时间】:2021-08-31 18:14:35
【问题描述】:
我已经找到了很多解决这个问题的方法,但它们都需要使用自定义服务器破坏 SSR,或者破坏 Next.js 中的 API 路由。我需要重定向到 https 并且仍然有 SSR 和 API 路由工作。
我尝试过使用 node 和 express 自定义服务器和 nginx buildpack 的几种变体,但都没有解决列出的标准。下面的代码是我最接近让它工作的代码。它适用于第一次加载,但随后会在来自非安全 http 的后续加载中中断。这也可能会破坏 SSR。
const { createServer } = require('http');
const { parse } = require('url');
const next = require('next');
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
app.prepare().then(() => {
createServer((req, res) => {
res.setHeader(
'strict-transport-security',
'max-age=31536000; includeSubDomains; preload'
);
if (req.headers['x-forwarded-proto'] === 'http') {
res.writeHead(301, { Location: `https://${req.headers.host}${req.url}` });
}
const parsedUrl = parse(req.url, true);
handle(req, res, parsedUrl);
}).listen(process.env.PORT, (err) => {
if (err) throw err;
console.log('> NextJS Server running...');
});
});
【问题讨论】:
-
你在 Heroku 上运行 dynos 的计划是什么?
-
标准 1X 或 2X 测功机。