vuepress博客整合waline评论插件遇到的坑
前段时间失业没事,把原来Hexos的博客用Vuepress重新整了下,用的主题是vuepress-theme-hope,这个主题里面提供了非常丰富的插件,包括Waline评论插件。今天把这个插件给接上了,不过过程有些坎坷,所以把过程遇到的坑记录一下。
注
在此强烈推荐vuepress-theme-hope,目前vuepress2能找到的最强主题,没有之一。项目链接:Github - vuepress-theme-hope
整合插件的步骤其实很简单,按照快速上手 | Waline和评论插件配置 | vuepress-theme-hope的指引基本能完成。不过,我这边部署的情况又比较特殊。
当我完成LeanCloud的实例创建、基于Docker的评论服务端部署以及前端工程配置修改后,重新发布前端工程发现,虽然我能够在文章底下新建评论且数据能在LeanCloud后台看到,但是初次进入文章的时候是没办法加载出评论列表的。通过查看网络请求发现,返回的信息提示请求缺少必传的参数。
一开始,我怀疑是服务端没有处理好参数,查看docker日志发现后端压根就没拿到请求评论列表的参数,所以服务端应该是没有问题的。结合前面可以新建评论的情况可以断定(新建评论用的POST),GET请求传来的参数丢失了。于是我觉得,问题应该是出在nginx配置上了。
我网站的所有流量都是走443端口进来的(因为站点是https的,所以会要求网站所有网络请求都必须是安全的https),通过nginx转发到其他端口。于是我在配置中增加了一些日志打印的代码,以观察参数传入的情况:
log_format main '$http_user_agent' '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'proxy_host=$proxy_host upstream_addr=$upstream_addr'
' uri=$uri reqUri=$request_uri args=$args';
#访问日志,后面的main表示使用log_format中的main格式记录到access.log中
access_log /var/log/nginx/access.log main;可是,当我调取获取评论的列表接口后,查看access.log,发现args压根就没有值,这就很邪门了。很明显,请求走过来时在URL里的请求参数直接丢失了。
在我百思不得其解之时,我突然想到我使用了CDN做全站加速,DNS配的CDN的链接,所以入流量会先到CDN,如果没有匹配到才会回源站,而基本上市面上的所有CDN默认都会对URL的参数进行过滤。(我也是在CDN的控制台翻了一会儿才知道这件事的...)所以......在CDN后台配置一下不过滤请求参数,问题就解决了。
相应的nginx配置也要改一下,需要人为拼接一下URL:
location ^~ /comment {
rewrite ^/comment/(.*?)$ /$1 break;
proxy_pass http://xxx:8360$uri?$args;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
# cache
add_header Cache-Control no-cache;
expires 12h;
proxy_pass_request_headers on;
proxy_pass_request_body on;
}回头想想,这个问题其实还是挺傻逼的,主要原因还是我忘记了自己用了CDN做全站加速。不过回头理一下这次排查问题的思路,还是挺有收获的。
