月度归档:2017年05月

Zabbix 3.0中文乱码解决方案

Zabbix出现中文乱码的可能原因主要是:

  1. Zabbix使用的数据库编码不为utf8
  2. Zabbix自带的字体有部分文字不支持

第一种情况,Zabbix将出现大范围的乱码,这种情况只能通过删除数据库,并使用utf8字体重建数据库解决

create database zabbix default charset utf8;

第二种情况,Zabbix主要在图表区域显示乱码。在监控图表页面,最新、最小、平均、最大这几个字显示为乱码。这种情况是由于zabbix图表自带的字体graphfont.ttf不支持中文导致的。我们需要进行替换

首先,在Windows系统中,找到我们要的字体,这里选择微软雅黑这个常用字体。

复制到桌面,获得两个.ttf字体文件

第一个是普通字体,第二个是加粗字体。我们选择第一个,上传到Zabbix所在服务器。

上传后,将字体移动到zabbix所在目录的fonts目录下。默认安装位置为

/usr/share/zabbix/fonts

在这个目录下,我们还可以看见zabbix的默认字体文件graphfont.ttf

最后,修改zabbix的配置文件include/defines.inc.php,将其中的graphfont修改为msyh即可

define('ZBX_FONT_NAME', 'graphfont');
define('ZBX_GRAPH_FONT_NAME', 'graphfont');

替换为

define('ZBX_FONT_NAME', 'msyh');
define('ZBX_GRAPH_FONT_NAME', 'msyh');

深圳医院近视验光经验

正在的这副眼镜不小心被折了,上次配镜距离现在也已经有快两年,想着刚好去配个新的。以往都是在街边的各种眼镜店里配镜,总感觉随便验个光就配了,还是不放心。而且在店里配价格虚高,往往需要砍很久的价才能配好。不想浪费口舌,所以这次打算在网上购买眼镜框和镜片。

网购眼镜第一步就是需要拿到自己眼睛的数据,网上查了查“深圳验光哪里好”,搜索到的结果基本都指向了医院。深圳的医院比较好的是深圳市人民医院和深圳市第二人民医院,另外眼科方面还有一个专科医院深圳眼科医院。由于眼科医院距离比较远,网上也有反映过程长收费贵的问题,所以我就没有考虑。于是我就分别去了两家人民医院的眼科验光。

深圳市人民医院

选了个周日中午出发,1点半从3号线翠竹站下车,D口出站就是市人民医院。排队的时候还有17个主任医师号,看来这个号并不是很紧。十分钟排完队,挂号费¥8。接着上5楼等护士叫号,不到一小时叫到我了。进去和医生说验光,医生开单缴费,总共不到1分钟。回1楼缴费,一共¥40。接着回到5楼验光室,没有排队,直接就进去了,医生开始验光。是个男医生,30岁左右。

这里详细说下验光经过:首先医生关了室内的灯,然后上验光仪器,两眼分别看了房子后开始试镜看E字表。调好能看清1.0后,开始下一项检查。医生用小手电照,然后让我看手电,两只眼睛依次看。这个检查我不太明白是在看什么。然后检查就完了。医生开验光单子。我发现单子上并没有写瞳距,于是我问医生。他说瞳距是在配镜的时候测的,这里没有瞳距仪,只能手测但是不准。不过我还是让他拿尺子手测了。测完后,给了我验光单:

从进验光室,到开完验光单,一共用了不到十分钟吧,总体感觉并不是十分靠谱。

深圳市第二人民医院

次一周周末,去市二医院做同样的检查。这次是在官网上预约的,提前三天预约,号还很充足。7号线黄木岗站下车,C口出站直接就到了市二医院的门诊楼。进门就是预约取号处,医保卡登记后就拿到了号。眼科并不在门诊楼,而在边上的银华大厦1层。去的时候是1点半,医生2点才上班。这里有一点很不人性化,必须吐槽一下:医生2点上班,所以门诊的门直接就锁上了,明明里头有坐可以让人休息,却不开门把患者锁在门外。

终于等到2点,医生来了,开门等叫号。由于我来的早,第一个号就是我的。和人民医院一样,问诊时间很短,一问是验光的就直接开单子了,没有废话。怎么说的,我觉得这样也不错,节省大家时间。去门诊大楼缴费后(检查费¥32),再回到眼科门诊验光室。这里已经排上队了,不过人不多,都是小孩儿。接下来说下这边的验光经过:

这次是个女大夫,也很年轻,30岁左右。首先还是在仪器上看房子,看完后E字表试镜。这次给人的感觉负责些,主要是体现在言语上,比较关心病人的感受。看完后,由于我两只眼镜度数相差较大(屈光参差),所以医生让我带着试镜出门走一会儿看看能适应不。5分钟后,感觉基本没问题就回去找医生确认。医生开验光单子,也没有测瞳距,看来医院都是默认不测的。我问医生能测不,她反问我是不是要配镜,我说是,她也没多说就拿瞳距仪出来测了一下。期间并没有推荐任何配镜店包括医院自己的。测完后开出了验光单子:

这次验光体验比人民医院的好些,感觉医生也负责任了些。不过最后测的结果两家医院相差不大,瞳距用机器测也和人民医院手测相同。

总结

两家医院医生的验光水平应该是基本相同的,应该都还比较准确。但是从服务的感觉而言,市二医院给人的感觉更加认真负责任些。不过试镜情况而言,我感觉反而市人民医院试镜的度数带试镜片更加舒服,所以在最后的配镜选择上,我对度数的要求应该会更加偏向市人民医院一些。总体而言,在这两家任意一家验光都是不错的,比眼镜店要放心些。

附:验光结果表

.htaccess的RewriteRule不生效

由于网站链接改版,需要对一些旧的已经被收录的内容进行301跳转。规则如下

Old: http://blog.zivers.com/post/666
New: http://blog.zivers.com/post/666.html

规则很简单,就是添加一个.html后缀。于是我在.htaccess中写入了一条RewriteRule:

RewriteRule ^post/(\d+)$ /post/$1.html [R=301,L]

但是,实际访问/post/123时,并没有按预期跳转,而是返回了一个404页面。由于我其他RewriteRule生效正常,所以排除了例如没有开启Rewrite Mod这一类的问题。焦点放在了这条规则上。然而这条规则太简单,以至于一眼就能明白肯定正确。在网上查了许久也没找到答案,于是我还是去看Apache的官方文档怎么说吧。果然,问题找到了,RewriteRule是顺序生效的,这点和Nginx一样,当第一条规则匹配生效后,第二条匹配到相同规则的URL就不会使用这条规则了。而我的.htaccess规则如下:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteRule ^post/(\d+)$ /post/$1.html [R=301,L]
</IfModule>
# END WordPress

显然,上面的RewriteCond已经匹配到了我想要跳转的URL,然后执行了这条规则:

RewriteRule . /index.php [L]

所以,问题迎刃而解,把我所需要执行的规则上移即可:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^post/(\d+)$ /post/$1.html [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

阿里云添加swap分区

在阿里云中新建ECS实例时,并不会自动给实例挂载swap分区。如果实例内存较小,很容易发生内存不足的问题。

[root@aliyun ~]# free -m
        total    used    free    shared    buff/cache    available
Mem:      991     233     390         0           367          609
Swap:       0       0       0

为解决问题,我们手动创建swapfile并挂载。首先创建swapfile

dd if=/dev/zero of=/swapfile bs=1M count=1024

创建的swapfile的大小将为bs(块大小) * count(块数量),在这里就是1M * 1024 = 1G。

修改swapfile权限,官方推荐权限为600

chmod 600 /swapfile

将这个文件标记为swap分区

mkswap /swapfile

使swap分区生效

swapon /swapfile

此时,使用free命令已经可以看见swap分区生效了

[root@aliyun ~]# free -m
        total    used    free    shared    buff/cache    available
Mem:      991     233     390         0           367          609
Swap:    1023       0    1023

到fstab文件中让系统引导时自动启动

vim /etc/fstab

在其中加入以下内容

/swapfile none swap sw 0 0

保存退出

接下来,我们对swap分区的使用方式进行优化。在系统中,使用一个叫做vm.swappiness的参数对使用swap分区的积极性策略进行控制,0表示消极使用,100表示积极使用。由于swap分区的IO速度要低于MEM,所以,在VPS中,我们一般采取较为消极的使用方式

这个参数的实际存储路径为

cat /proc/sys/vm/swappiness

由于是在/proc下,即储存于内存中,所以无法使用vi编辑器修改。所以,使用sysctl命令修改,将它的值修改为10

sysctl vm.swappiness=10

最后,修改启动项配置,使这个设置在启动时也生效。修改/etc/sysctl.conf中同名参数值:

vm.swappiness = 10

保存退出,配置完成

参考:How To Add Swap on Ubuntu 14.04

https连接301重定向到http

由于CDN支持以及迁移便捷性的考虑,最近将博客从https连接方式回退到了http连接的传统模式。但是这样的话,原来网站的URL就无法访问了,所以需要进行301重定向。

首先,需要安装httpd的SSL支持

yum install mod_ssl

安装完成后,会在httpd的modules目录下增加mod_ssl.so,同时在conf.d目录下生成一个ssl.conf配置文件。

我们将这个ssl.conf复制一个,然后在其中加入跳转规则即可

Listen 443 https
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache         shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout  300
SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin

<VirtualHost _default_:443>

    ErrorLog logs/ssl_error_log
    TransferLog logs/ssl_access_log
    LogLevel warn

    SSLEngine on
    SSLProtocol all -SSLv2

    SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA

    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =zivers.com [OR]
    RewriteCond %{SERVER_NAME} =www.zivers.com
    RewriteRule ^ http://blog.zivers.com%{REQUEST_URI} [END,QSA,R=permanent]

</VirtualHost>

这样,我们就将https://(www.)zivers.com都以301的方式重定向到了http://blog.zivers.com这个url下。

[root@localhost conf.d]# curl -I --insecure https://www.zivers.com
HTTP/1.1 301 Moved Permanently
Date: Thu, 04 May 2017 05:50:54 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips PHP/5.4.16
Location: http://blog.zivers.com/
Content-Type: text/html; charset=iso-8859-1