前面有篇文章《我也撸了一个古诗词网站》记录了我新上线的一个古诗词网站:寻古诗词网,到现在网站已经上线了3个月。

前天网站挂了,4个小时后才发现,起因是有人直接通过小程序的api爬数据。做小程序的时候,为了赶进度,接口没有做限制,考虑前期没有多少流量,也一直没加。这次网站挂掉是意料之中的事,因为之前挂的时候排查过原因,只不过一直没来的及改,这次促使我把偷的懒补回来了。

网站挂掉是由于mysql连接不够用了,按照现有网站流量是不能够出现这个问题的,合理的解释就是没有释放mysql连接。当天就修复了这个bug,是写法的问题,然后又给api接口添加了hmac验证,这个需要修改服务器端代码和小程序端的代码。昨天晚上修改测试完,提交了微信小程序审核,今天早上审核通过后,我将api服务器端发布,然后又出错了,认证失败。我赶紧恢复到原来的版本,继续查找问题,最后发现在服务器端获取到的scheme和host是http和localhost,当即恍然大悟。

由于我使用了nginx做反向代理,配置的时候没有配置全。添加

proxy_set_header Host $http_host;

就能正常获取到域名,但是添加

 proxy_set_header X-Forwarded-Proto $scheme;

依然获取不到 https,查看了 .net core 的文档发现,还需要配置 Forwarded Headers 中间件。在ConfigureServices中添加

services.Configure<ForwardedHeadersOptions>(options =>
        {
            options.ForwardedHeaders =
                ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
        });

在Configure 中添加

 app.UseForwardedHeaders();

这样就可以正常获取到请求的 scheme了。

最后,如果你对古诗词感兴趣,可以访问寻古诗词网:https://www.xungushici.com