感冒

我的体质确实有点弱。上一次是去年的十一月份,冷热交替的天气,感冒难受了好久;这一次是三月份,春夏换季的时节,我又中招了。一感冒,头疼得让人身心俱疲,对我这种缺乏自制力的人无异于一场灾难。

继续阅读感冒

php使用正则表达式去除连续空格

今天打算给我的Termux小工具加个功能,通过php调用df命令的方式实现显示手机硬盘剩余空间。但是我在分割返回的字符串结果时遇到了问题。

由于HTML的段落会自动忽略重复的空格,我被误导用了空格作为分隔符试着分割结果到数组里,但是只能正常显示出开头的“/dev/fuse”。接下来我尝试了用换行符分割,无果。直到我把输出放进<pre>里才反应过来,df的输出结果是用了大段空格来隔开不同列的,如下图:

然后我开始寻找可以将连续空格转为单个空格的方法,最后用一条正则表达式解决了。完整解决如下:

//Disk Usage
//Only test on Android 7 with SDCard
$b = exec("df -H | grep fuse", $bout);
//利用正则表达式将结果中两个及以上的连续空格替换为单空格
$bout[0] = preg_replace('#\s{2,}#',' ', $bout[0]);
$bout[1] = preg_replace('#\s{2,}#',' ', $bout[1]);
//数组中结果依次为Filesystem, Size, Used, Available, Used%, Mounted on.
$disk_usage = explode(" ", $bout[0]);
$sdcard_usage = explode(" ", $bout[1]);

Mysql使用root用户不需要密码也能登录的问题

今天突然发现,服务器上的Mysql密码我有点记不清了,当时本想着存下来但是并没有存,就上服务器试了一下密码。

$ mysql -uroot -p
Enter password:

输入印象中的密码后,果然成功登录了Mysql命令行。把密码记下来后,我又查看了wordpress数据库专用用户的密码,发现不对劲:我刚刚给root账户输入的密码,正是这个用户所使用的密码,而这是不可能的,我不会为root用户和子用户设置一样的密码。于是我再次使用root用户登录,密码随手乱打,居然也进去了。难道是忘了设置密码?那就设置一个吧。

$ mysqladmin -u root password 'new-password'

设置完密码后,还是用什么密码都能进去。查看 mysql.user ,只有两个用户,用 select password(‘password’) 也确认了root用户的密码确实是刚刚设置的。flush privileges 和重启mysql服务都没有用。然后我找到了这个:

在mariaDB中,默认会有一个叫 console 或 unix_socket 的 plugin ,它允许你无需密码便能从控制台进入 mysql,但同时会禁止密码认证,你无法从别的客户端连接它。我检查了 root 用户的 plugin 列,果然有一个 unix_socket 。但我不打算去掉它,既然这是一个默认配置,并且禁止了外部登录,应该有一定的安全性,如果已经被人黑进了服务器控制台,那修改一个mysql密码也不难,不如就这样留着方便自己了。

Apache2开启OCSP Stapling

最近感觉网站加载的速度有点慢,在“等待响应”阶段花了很多时间,于是想着优化一下,能优化一点是一点。除了放弃JetPack插件以外,考虑到可能在HTTPS上也受到一点影响,便试着从这里着手。

OCSP 是一个在线证书查询接口,它建立一个可实时响应的机制,让浏览器可以实时查询每一张证书的有效性,解决了 CRL 的实时性问题,但是 OCSP 也引入了一个性能问题,某些客户端会在 SSL 握手时去实时查询 OCSP 接口,并在得到结果前会阻塞后续流程,这对性能影响很大,严重影响用户体验。(OCSP 地址也在证书的详细信息中)
OCSP Stapling 就是为了解决 OCSP 性能问题而生的,其原理是:在 SSL 握手时,服务器去证书 CA 查询 OCSP 接口,并将 OCSP 查询结果通过 Certificate Status 消息发送给浏览器,从而让浏览器跳过自己去验证的过程而直接拿到结果,OCSP 响应本身有了签名,无法伪造,所以 OCSP Stapling 既提高了效率也不会影响安全性。另外服务器有更好的网络,能更快地获取到 OCSP 结果,同时也可以将结果缓存起来,极大的提高了性能、效率和用户体验。

阿里云 CDN HTTPS 最佳实践——OCSP Stapling

百度简单搜了一下(懒得开那啥上Google),大多是Nginx的配置,并且有些不知道为什么看起来还挺复杂的。对于我这种单站点Apache2的设置其实很简单,只要在 /etc/apache2/mods-enabled/ssl.conf(Ubuntu或Debian包的默认位置,自行编译的话可能在 conf/extra/httpd-ssl.conf ) 中加入以下两行:

SSLUseStapling On
SSLStaplingCache "shmcb:ssl_stapling(32768)"

然后重启Apache就可以了。不过究竟有多少提升,没能仔细前后对比过所以不好说,配合禁用插件总的效果还是有的。

检验OSCP响应和其他复杂情况的配置方法,参考Apache官方文档