我试图用我的应用程序切换到https。我想使用Letsencrypt,但我在网上看到的所有教程都指出这需要单独的代理设置,以便以固定的时间间隔续订证书。我最近发现greenlock-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,但之后,浏览器放弃并声明The site cannot be reached
。
为什么呢?我误解了什么吗?
修改
我知道letsencrypt可能会将localhost解析为我的域。我的应用程序确实有一个域名,我只是不想部署一些我不能100%确定无效的东西。我希望应用程序可以从localhost运行和测试。这就是我的想法
server: 'staging'
greenlock-express配置的一部分用于。
答案 0 :(得分:4)
答案 1 :(得分:1)
您不能将localhost与Greenlock™或任何Let's Encrypt™客户端一起使用。
您必须通过域访问该网站。
staging
选项适用于面向公众的生产环境。如果您希望在部署到现有网站之前确保其有效,则可以使用test.mysite.com
和www.test.mysite.com
等测试域。
我建议看看最新版本,你可能会发现它更容易上手: