关于个人建站的遇到的一些问题以及解决方式
前言
我使用的是一台2C2G3M的阿里云ECS,最开始是按照Linux+apache+nginx代理+php+mysql搭建的,当时接触到了wordpress项目,被其丰富的插件市场和成熟的设计吸引,所以就部署了wordpress项目,由于刚开始我想实现比较多的功能,所以安装了很多的插件,但是发现对于这台服务器来讲是有点吃不消的,2G的内存基本一直跑在1.9G,这显然是不行的,所以我强制开了8G的swap分区,使用阈值设置在80%,但是这么做的代价就是极大程度的损失了内存的IO性能,而且后台管理起来非常卡,访问也受限于3M的带宽,响应也没有达到正常水平。
后来才觉得还是使用轻量化的项目,也就是typecho,搭配简答的插件实现blog好了,也就有了现在的网站
以下是我建站以来遇到的一些,不好查到相关答案以及解决方式的问题,每个问题都尝试折腾了很久才搞清楚状况,所以在这里记录分享一下
nginx本地反代apache或SSL加密后导致WP的样式丢失
这个是wordpress非常奇怪的一个点,他在加密后、进行穿透时或者由nginx反向代理后,提示重定向次数过多,就会导致自己的样式丢失,但是网站还是可以访问的
在这里使用nginx反向代理是因为懒得给每个域名注册一次证书了,所以直接使用泛域名证书加主域名证书进行代理加密,一次性加密所有的域名,以后再添加新的三级域也不需要添加证书配置,只添加对应的域名和虚拟主机即可
不过有的时候可能光做了加密也会直接丢失样式,这里好像是由于部分浏览器策略导致的,edge浏览器就会对这个样式文件进行拦截,但是chrome浏览器貌似就不会,但是归根结底还是WP的锅,毕竟作为提供服务的一方,不能要求每个访问者去做出修改
好在这个问题解决方法网上分享的还比较多,相对比较好解决
首先是添加代理或跳转的头部传递,这里只写代理部分的配置
location / {
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_pass http://127.0.0.1:8080;
}
再在wp网站根目录的wp-config.php里加入:
define('WP_HOME', 'http://'.$_SERVER ['HTTP_HOST']);
define('WP_SITEURL', 'http://'.$_SERVER ['HTTP_HOST']);
有的文章说这两个方法二选一即可,但是我个人按照我这个架构实测下来是需要两个一起设置的,可能是nginx代理apache处理php动态请求导致的,反正根据自己实际情况去测试就好
WP页面编辑器Elementor编辑器加载中无法进入
这个问题就比较恶心🤢了,当时我一度以为是我的服务器太卡了,我还换了好几个版本去测试
先说结论,免费版本的elementor不支持除了WP默认URL风格以外样式的URL风格,如果你之前改过或者默认不是的话,使用elementor编辑器是打不开的,就是下图这个位置,免费的elementor只能使用第一个风格
而且恶心的是他不提示你是这个问题,就让你开什么安全模式,然后还是打不开进入到他的问题解决文档中,读完一遍发现没啥用,最后在升级套餐的时候惊鸿一瞥发现只有付费版才支持其他的URL风格,并且wordpress默认这里就是上图所示自定义风格,随后我把这个URL风格改成朴素发现就能打开elementor了,这是真的狗啊
泛域名加密后主域名未被加密+证书自动续期
接下来是一个困扰我比较久的问题,我原来的网页是有一个跳转页的,但是跳转页使用的是主域名,而另外两个是三级域名,所以我当时是想用一个泛域名证书把这个几个域名全覆盖了,使用一个认证证书对所有的域名进行加密,再去添加阿里云助手结合certbot进行证书自动续期,但是除了第一次后面都失败了,当时第一次对所有域名加密成功可能导致我记错了一些技术细节,导致我认为泛域名包含了主域名,所以有一段时间我的主域名是没有加密认证的
后面重新搭建这个博客项目的时候发现泛域名证书的认证范围实际上是不包含主域名的,所以一下子也就明白之前为什么主域名没被加密认证了,但是我们要实现的是用一个pem认证证书来对所有域名也就是泛域名+主域名来进行加密,其实也很简单
只要认证的时候做一个多域名证书就好了,就拿我的域名来举例,我的主域名是reeskysui.xyz,泛域名是*.reeskysui.xyz,这个泛域名实际看上去和三级域没啥区别,只不过变成了一个通配符,这样来匹配所有的三级域名,当加密的时候将两个*.reeskysui.xyz和reeskysui.xyz一起填写进行认证即可
各大云服务厂商也提供合并域名服务,如果要进行统一代理加密的话也可以进行合并,我这种小站的话就用let's encrypt就好了,可以使用certbot进行免费认证,再结合阿里云的工具进行自动续期指路 - 使用Certbot申请免费 HTTPS 证书及自动续期
要注意一下如果想像我一样使用certbot注册一个合并多域名证书需要在注册时填写两个域名,也就是两个-d选项,如果之前已经申请过证书的话也可以直接申请可以覆盖创建,后续的续期就参照上面的指路链接就好
# 泛域名证书申请
certbot certonly -d *.使用自己的域名替换.com --manual --preferred-challenges dns
# 合并域名证书申请
certbot certonly -d *.使用自己的域名替换.com -d 使用自己的域名替换.com --manual --preferred-challenges dns