很久没有更新我的博客,前几天网站突然不能访问,在排查原因无果之后,决定初始化我的磁盘,重新搭建我的博客。我是个爱折腾的人,当然循规蹈矩地安装lamp搭建博客基本上驾轻就熟,这一次我决定解决上次建站遗留下来的几个坑:
1.上次建站用的是centos自带的yum源,php5,apache2.4.6,以及mysql5,这一次我决定统一换成php7+mysql8。
2.网站https化。
3.让网站更加安全。
物料:
1.云服务器一台(centos系统)
2.Typecho博客最新稳定版安装包一个
3.手和脑子
首先,更新系统好习惯
sudo yum install update
sudo yum install upgrade
接下来,配置防火墙
我的感受就是:不要图省事直接关防火墙!虽然阿里云服务器防D防扫功能已经做得很好了,但是风险还是存在的。
开启防火墙服务: systemctl start firewalld
查看防火墙状态: systemctl status firewalld
开机启动:systemctl enable firewall
Tips:systemctl的这三个指令在centos7+版本改变服务状态很有用,可以记一记。
接下来,进行Apache的安装
这里,我偷懒就直接yum install httpd了,这时候安装下来的是centos自带的apache2.4.6版本,不过,这里的省事也给我之后造成了不小的麻烦。
安装完成之后,我们开启apache服务
service httpd start
查一波状态
service httpd status
如果看到一个绿色的running小圆点,就说明服务搭建好了,这时候我们访问我们的公网ip,就能看见喜闻乐见的apache running 的页面了。
接下来,进行mysql的安装
没有直接yum install,而是去官网下载了mysql最新版的rpm源
然后执行rpm -ivh进行安装
然后它告诉你mysql的默认缺省密码的存储位置,我们直接cat拿到密码,然后
mysql -u -root
输入密码,然后重新为数据库设置新的密码。
完成后,我们新建一个名为typecho的数据库
Create database typecho
然后使用grant privilege赋权
exit~
那么mysql服务就安装到这里。
接下来安装php
Yum源提供的php是5.7版本的,但是我选择去官方源下载php7的版本,这里安装方式不再赘述,网上一搜一大把。
下载typecho
去typecho官方网站wget下载最新稳定版安装包,tar解压,再把build文件夹里面的东西mv到/var/www/html 目录下。
这时候,访问公网ip,看到安装程序,一切正常。
我们的坑正式来了。
第一个坑:连不上数据库
数据库创建了,死活连不上,让你检查配置。
我们打开myql数据库
use mysql;
select user,plugin from user ;
我们可以看到,列出来的用户里面,加密方式为caching_sha2_password
Typecho默认数据库连接不支持sha2加密方式,我们改为native加密模式
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
然后修改密码
第一个坑顺利解决
安装完网站,进后台,进行各种设置,这时候,看到我们的域名
http://wutongdeng.cn
作为一名资深强迫症患者,chrome和火狐再给我丢一个不安全,就十分难受。
不用说,https化。
上次搭建因为mysql版本问题没能成功解决(一个很奇怪的报错条件)
开始。
我首先选择的是certbot,一个免费证书颁发网站(白嫖党上线)。
网站虽然是英文的,但是有点英语基础安装起来没有困难,况且每一步的安装命令都给了,我们ctrl c ctrl v就能解决(额好吧,linux应该shift insert)。抱着这种心态,一路配置下去,突然卡在了
sudo yum install python2-certbot-apache
这一步上。
安装的过程始终报错,后来才发现是python版本冲突的问题,这时候我想都没想干了一件蠢哭自己的事情
rpm -qa|grep python|xargs rpm -e --allmatches --nodeps
whereis python|xargs rm -fr
然后我们再whereis python
没有回显,说明python卸载干净了,我们再高高兴兴地sudo yum install python2-certbot-apache
这时候,屏幕显示,yum不可用了。
网上一查,yum和python有千丝万缕的联系,删除了python,yum就不能正常使用。
喵喵喵?一个基于yum仓库,一个基于pip仓库,你俩怎么就有py关系了?
虽然不服,还是接受了事实,决定把yum和python都删得干干净净然后重新安装。
方法是去阿里云,163,以及ustc或者清华的镜像站去找rpm源,方式也是wget +rpm
有依赖关系的要放在一块儿安装。
恢复之后,sudo yum install python2-certbot-apache成功,然后接着
yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
这时候,系统提示,找不到yum-config-manager。
网上找了大部分方法都没有解决这个问题,我干脆就直接把虚拟机上同版本的centos系统里的yum-config-manager拷贝过来。
再执行命令,成功。
然后sudo certbot --apache
按照提示配置证书,这时候配置完了之后,又回显失败了。
排错了很久也没有找到原因(感觉可能和我卸载yum和pip重装有关系)
我再次投向了腾讯爸爸的怀抱。
登录腾讯云平台,申请ssl证书,按照它的步骤走,什么放密钥在根目录,十分清晰明了。
认证很快,邮件通知,然后到平台上下载你的证书文件
进入/etc/httpd/conf.d 修改ssl.conf文件,把里面证书文件的缺省名称换为你的证书文件的位置,并且正确放置证书。
重启apache服务,这时候我们可以看到网站已经能够https访问了,但是仍然能够以http的方式访问,显然不够完美。
我们修改/etc/httpd/conf 里面的http.conf 文件,把网站根目录的overwrite功能打开(网上大部分的教程都是rewrite,但我死活没有找到,可能apache的版本导致的)
这时候,我们利用rewrite功能在根目录写一个.htaccess文件
如下:
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>
文件会监听80端口,并且301重定向到https的网站,重启apache服务,输入http的域名,成功定向到https的域名。
至此,https化成功。
那么如何让你的博客更加安全呢?为此,我做了以下几个改变:
1.改变网站后台文件地址(名称需要非常复杂),并且设置ip白名单。
2.网站目录重命名,并且apache配置禁止访问
3.全站开启静态化。
4.伪造了一个假的admin页面,用于愚弄脚本小子们。(之后想进一步学习蜜罐陷阱的布置方法,也算是开了一个小头了吧。)
2019年1月14日
傍晚