针对我的使用情况,我认为没有必要在服务器上添加反向代理层,因为node http服务器已经拥有完整的功能。由于问题与NestJS相关,这里我提供一个简单的原生解决方案,使用Nest中间件。当然,您还需要遵循NestJS文档中有关托管两个服务器的说明,这也是相当简单的。
import { HttpStatus, Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response } from "express";
@Injectable()
export class HttpsRedirectMiddleware implements NestMiddleware
{
use(req: Request, res: Response, next: () => void)
{
if (!req.secure)
{
const httpsUrl = `https://${req.hostname}${req.originalUrl}`;
res.redirect(HttpStatus.PERMANENT_REDIRECT, httpsUrl);
}
else
{
next();
}
}
}
https://
。
然后,将以上中间件类注册到AppModule
的configure()
方法中的所有路由中。configure(consumer: MiddlewareConsumer)
{
consumer.apply(HttpsRedirectMiddleware).forRoutes("*");
}
对于生产发布,您可能会使用nginx。 Nginx将侦听端口80并重定向到nestJS端口。 这种解决方案的优点是可以轻松地重定向到https。 在您的配置中,您可以放置类似于以下内容的内容
server {
listen 80;
server_name example1.com example2.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example1.com example2.com;
...
}
node main.js
来提供我的nestjs构建的,没有什么花哨的东西。如果有所改进并能带来好处,我很乐意进行更改。 - FuzzyTemper