如何在宝塔面板启用ASP.NETCORE网站并自动申请HTTPS证书

要想在 Linux 上部署 ASP.NET CORE 网站,除了使用“宇内流云”大神的 Jexus 之外就是使用 Nginx 对 ASP.NET CORE 网站进行反向代理。

常规的做法是在服务器上部署完成 ASP.NET 运行环境、网站程序之后,使用 Supervisor 对网站程序进程进行守护。网站程序采用固定的端口号,之后在宝塔面板中创建网站并配置反向代理。

宝塔面板是一个不错的产品,为网站提供了一键申请免费 HTTPS 证书的功能。该功能会在网站根目录下生成一个名为 .well-known 的目录,证书的申请、续签均需要依赖该目录。

在配置完成反向代理之后,对 .well-known 目录的访问将会由 ASP.NET CORE 程序进行处理,这就会导致该目录下的文件访问不到了,于是自动申请 HTTPS 证书的功能也就失效了。

有两种方式可以解决该问题:

修改 Nginx 网站的配置,让对 .well-known 的请求不走反向代理。修改 ASP.NET CORE 网站的设置,让其支持对 .well-known 目录下文件的访问。

经过几番折腾,修改 Nginx 网站配置的方式并没有走通,这完全是因为笔者在 Linux 上的造诣浅薄。不过,第二种方案的实现倒是非常容易。

笔者将 ASP.NET CORE 应用发布到了网站的根目录,这也就意味着 .well-known 目录和 wwwroot 目录是平级的。那么,我们仅需要增加一个静态文件中间件即可:

app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider($"{env.ContentRootPath}/.well-known"), RequestPath = "/.well-known", ServeUnknownFileTypes = true });

以上代码需要在 Configure 方法中调用。其中 ServeUnknownFileTypes = true 代表:即便文件的 MIME 类型未知,也将其发送到客户端。该参数也可以用来解决部分静态文件因后缀过于小众而无法下载的问题。但要注意的是,这个设置会允许用户下载 FileProvider 提供的所有文件包括但不限于 dll 、exe、 db 等。开启此设置前需要小心谨慎。

如何在宝塔面板启用 ASP.NET CORE 网站并自动申请 HTTPS 证书-码农很忙