gpt4 book ai didi

node.js - 将 LetsEncrypt 与 Node Express 应用程序一起使用

转载 作者:行者123 更新时间:2023-12-02 13:28:54 25 4
gpt4 key购买 nike

我正在尝试将我的应用程序切换到 https。我想使用 Letsencrypt,但我在网上看到的所有教程都表明这需要单独的代理设置,以恒定的时间间隔更新证书。我最近发现 greenlock-express 似乎将续订过程烘焙到我的 Express 应用程序的 https 包装中,因此我不需要设置一个单独的服务器作为续订代理(或者我是否误解了它的目的?)。

这是我到目前为止所拥有的:

// Express
import * as http from 'http';
import * as https from 'https';
import * as e from 'express';
const LEX = require('greenlock-express');

/** Run this using MyServer.Initialize(process.argv) **/
export class MyServer {
public app: e.Express;
private clientPath = path.join(__dirname, './public');

static Initialize(args: string[]): Promise<any> {
return new MyServer()
.start(args)
.catch((error: any) => console.error(error);
}

constructor() { }

start(args: string[]): Promise<https.Server> {
// Simplified the code here, in order to only display relevant info
return Promise.resolve(this.createServer());
}

public createServer(): https.Server {
this.app = e(); // Creates an express application

// Setup routes and standard stuff, which I removed to keep this question simple

// Setup base route to everything else
this.app.get('/*', (req: e.Request, res: e.Response) => {
res.sendFile(path.resolve(this.clientPath, 'index.html'));
});

现在,如果我在此处返回以下内容,应用程序将正常启动并响应 http://localhost .

    return this.app.listen(80)
.on('listening', () => console.log(`Serving on http://localhost/`));

但是,如果我尝试像这样将 greenlock-express 包裹在我的应用程序中(这是来自 https://www.npmjs.com/package/greenlock-express 给出的示例,所以我有点失望,因为我无法让它在框):

    const lex = LEX.create({
server: 'staging',
email: 'my.email@mailprovider.com',
agreeTos: true,
configDir: 'cert/',
approveDomains: ['mydomain.org']
});

// Force redirect to https
http.createServer(lex.middleware(require('redirect-https')())).listen(80, function () {
console.log('Listening for ACME http-01 challenges on', this.address());
});

return <https.Server> https.createServer(lex.httpsOptions, lex.middleware(this.app))
.listen(443, () => console.log(`Serving on http://localhost/`));
}
}

没有任何效果。我确实从 http://localhost 重定向至 https://localhost ,但此后,浏览器放弃并指出无法访问该网站

为什么?我是否误解了什么?

编辑

我知道在将 localhost 解析为我的域时,LetsEncrypt 可能会出现问题。我的应用程序确实有一个域,我只是不想部署一些我不能 100% 确定有效的东西。我希望应用程序可以从本地主机运行和测试。我就是这么想的

server: 'staging'

greenlock-express 配置的一部分是用于。

最佳答案

是的,我想你可能有。 Letscrypt 为域和子域提供免费、短期、经过验证的 SSL 证书(我认为最多可达 10 个)。您想要做的是让 LetsEncrypt 服务器向您的应用程序发出请求 http://localhost/.well-known/acme-challenge验证您拥有该域名。让加密永远无法解决 http://localhost到您的服务器。您需要在服务器上运行此代码和模块,可以从您拥有的域上的公共(public)互联网访问该代码和模块。然后 LetsEncrypt 将能够访问您的应用程序、验证域并颁发证书。然后您的网站将在 SSL 下运行。那个,或者我误会了什么!

关于node.js - 将 LetsEncrypt 与 Node Express 应用程序一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45303467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com