我通过创建另一个使用 express 构建的自定义服务器文件找到了我的解决方案。实际上,正如我所提到的,从一开始我就知道有一种方法可以通过 express 服务器实现信任代理设置。但是由于我已经在使用 node http 模块,所以我不想更改此结构,并想了解如何在此模块中完成此代理设置。我无法找到方法,但因为我知道 express.js 是基于节点 http 模块构建的;必须有办法。
不幸的是我找不到它或者它更难实现然后表达 js。我已经有一个带有 http 模块的开发服务器,它还读取 ssl 证书等。我没有完全删除它,而是添加了另一个具有 expressjs 和代理设置的文件。
以下代码没什么大不了,但它可能对某人有所帮助,因为它们提供了具有 SSL 环境的自定义 Next.js 服务器,用于开发和代理服务器生产。
带快递和代理的服务器
// This server file intended to use behind IIS.
const next = require("next");
const express = require('express')
const port = process.env.PORT || 3000;
const app = next({ dev: false, dir: ".", quiet: false });
const handle = app.getRequestHandler();
app.prepare().then(() => {
const server = express();
server.set('trust proxy', 1)
server.get("*", (req, res) => {
return handle(req, res);
});
server.listen(port, (err) => {
if (err) {
throw err;
} else {
console.log(`Server started at port ${port}`);
}
});
});
server.dev
console.log("Development mode.");
const { createServer } = require("https");
const { parse } = require("url");
const next = require("next");
const fs = require("fs");
const port = process.env.PORT || 3000;
const app = next({ dev: devMode, dir: ".", quiet: false });
const handle = app.getRequestHandler();
const httpsOptions = {
key: fs.readFileSync("./certs/cert.key"),
cert: fs.readFileSync("./certs/cert.pem"),
};
app.prepare().then(() => {
createServer(httpsOptions, (req, res) => {
// Be sure to pass `true` as the second argument to `url.parse`.
// This tells it to parse the query portion of the URL.
const parsedUrl = parse(req.url, true);
const { pathname, query } = parsedUrl;
handle(req, res, parsedUrl);
}).listen(port, (err) => {
if (err) throw err;
console.log(`Port: ${port}`);
});
});