由于VPS启动失败导致博客无法访问

昨天(8月12日)下午14:18收到监控报告提示博客无法访问,遂检查VPS状态,但发现VPS无法连接,本以为和上次一样是由于母机遭到了DDoS,但查看了服务商的状态报告,母机正常,于是进入控制面板,控制面板提示VPS运行正常,就是内存消耗比较奇怪,正常要消耗100多MB,但这次就67MB,虽然提示正常运行,但是VPS依旧无法访问,提示:Warning Unknown feature ppp:on,于是重启了VPS,结果问题依旧,初步怀疑是VPS系统出了故障,但是事情比较多,也不想浪费时间在重做VPS系统上,于是发了ticket到服务商客服,结果今天查看,发现问题解决了。

继续阅读

解决PHP加速器eAccelerator导致php-cgi占用内存过多的问题

一台小内存的VPS,总共才128MB保证内存(Guaranteed RAM),最大256MB的突发内存(Burstable RAM),今天调用free,发现内存占用达到150MB~170MB,这还了得,长期占用服务商的突发内存也会被K掉的,使用ps aux分析当前的进程列表,找到php-cgi这个进程占用了至少50MB~60MB的内存,这个是PHP的FastCGI服务,我已经将其控制在两个进程范围内了,除了master进程,另外一个php-cgi就占用了大量的内存,看来要好好精简一下了。

首先去掉不必要的扩展,一些当前站点并没有使用到的扩展程序,可以省略,这么一去除,感觉内存没下降多少,我又查阅了一下当前加载的扩展找到了eAccelerator,前面我写过一篇文章《Debian/CentOS VPS安装PHP加速器eAccelerator笔记》介绍关于eAccelerator,以及如何获取安装等信息。其实我们可以从其源代码包中找到control.php。将这个文件复制到Web服务器目录下,并且通过浏览器执行,得到一些关于eAccelerator的信息,其中一项Total memory标记的是32MB,下面还有个Memory in use标记的是50%左右已经使用,假如这时再浏览新的PHP页面,这个数据还将上升,直到占满Total memory为止。

继续阅读

Linux/VPS下定时通过电子邮件(Email)发送文件及MySQL数据库备份

最近Linux搞得比较多,之前有个精简版的VPS服务器,今天又拿过来测试,主要是定期为上面的网站做个备份,大概看了一下,需要备份的分别有两个地方:1. 网站的主目录;2. MySQL数据库。于是想搞个定时发送备份文件到指定邮箱的做法。Linux刚上手,也不是很熟练,参考了一些命令,以及前辈们的备份做法,硬着头皮写了Bash Shell脚本,初步测试下来基本满足了要求,在这里分享给大家参考,不过建议大家使用前在实验环境下测试确保正常,如果因为潜在问题造成损失我可不负责哦:-)当然对于我这种新手而言,这样的脚本难免会有Bug,希望高手不吝指出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/bin/bash
 
# Author: wangye
# For more information please visit:
# http://wangye.org/
# 请在使用本脚本前做好测试工作,脚本功能仅供参考,
# 对于可能的潜在问题造成损失,本人不承担责任。
 
MYSQL_USERNAME="mysql-username"
MYSQL_PASSWORD="mysql-password"
 
# 下面这行指示接收备份文件的电子邮件地址
BACKUP_RECEVIER="email-address-recive-backup@example.com"
BACKUP_FILENAME="/var/sample-site" # 需要备份的目录
BACKUP_DBNAME="sample" # 需要备份的数据库名称
BACKUP_PREFIX="backup_" # 备份文件的前缀
 
# 下面一些命令路径可以通过whereis获取
MYSQLDUMP_PATH="/usr/bin" # mysqldump 命令所在的路径
TARCOMPRESSOR_PATH="/bin" # tar 命令所在的路径
RM_PATH="/bin" # rm 命令所在的路径
MUTTMAIL_PATH="/usr/bin" # mutt 命令所在的路径
TEMP_PATH="/tmp" # 临时目录
 
# 产生临时名称形如 backup_20120221 名称
make_backup_name() {
    TEMPNAME=${BACKUP_PREFIX}$(date +"%Y%m%d")
}
 
# 产生临时备份目录
make_backup_dir() {
    make_backup_name
    TEMPDIR=${TEMP_PATH}/$?
    mkdir -m 777 -p $TEMPDIR
}
 
backup_files() {
    ${TARCOMPRESSOR_PATH}/tar -zcvf \
        ${TEMP_PATH}/${TEMPNAME}.tar.gz ${BACKUP_FILENAME}
}
 
backup_databases() {
    local EXPORTDIR=$1
    ${MYSQLDUMP_PATH}/mysqldump -u${MYSQL_USERNAME} \
      -p${MYSQL_PASSWORD} \
      ${BACKUP_DBNAME} >${EXPORTDIR}/${BACKUP_DBNAME}.sql
 
    ${TARCOMPRESSOR_PATH}/tar -zcvf \
      ${TEMP_PATH}/${TEMPNAME}_${BACKUP_DBNAME}.tar.gz ${EXPORTDIR}
}
 
send_byemail() {
    echo "**IMPORTANT BACKUP** Hi! :-)\n\n$(uname -a)"| \
        $MUTTMAIL_PATH/mutt -s "** System Backup$(date +%Y-%m-%d)" \
            -a ${TEMP_PATH}/${TEMPNAME}_${BACKUP_DBNAME}.tar.gz \
             ${TEMP_PATH}/${TEMPNAME}.tar.gz -- \
            ${BACKUP_RECEVIER}
}
 
# 清除产生的临时文件(使用了rm -rf怕怕中,不过目标路径正确就OK啦)
cleanup() {
    $RM_PATH/rm -rf $TEMPDIR
    $RM_PATH/rm -rf ${TEMP_PATH}/${TEMPNAME}_${BACKUP_DBNAME}.tar.gz
    $RM_PATH/rm -rf ${TEMP_PATH}/${TEMPNAME}.tar.gz
}
 
main() {
   make_backup_dir
   backup_databases $TEMPDIR
   backup_files
   send_byemail
   cleanup
}
 
main
 
exit 0

继续阅读

Linux/VPS环境下Nginx安全配置小记(1)

关于Nginx介绍我就不多说了,下面主要记录一下我所收集的一些有用的配置,多数是和服务器安全相关的。以下部分参考了nixCraft上的《Top 20 Nginx WebServer Best Security Practices》这篇文章很有借鉴意义,详细讲解了Linux+Nginx服务器安全的方方面面,这篇文章的中译版叫《20个Nginx Web服务器最佳安全实践》,大家可以搜索一下。

1. 删除不需要的Nginx模块

我们可能根据我们的需要配置Nginx,当然在编译时可以选择某些不需要的模块不编译进去,比如精简掉autoindex和SSI模块,命令如下:

1
2
3
./configure --without-http_autoindex_module --without-http_ssi_module
make
make install

当然在编译前可以通过下面的命令查看那些模块是可以开启或者关闭的:

1
./configure --help | less

2. 修改Nginx服务器名称和版本号

著名的NETCRAFT网站可以很轻松的查到你服务器的操作系统和服务程序版本,或者HTTP Response Header也能向我们透露这些信息,很多情况下,这些信息将为黑客进行攻击提供依据,因此我们需要对其进行伪装。

继续阅读

RAMHost.us的128MB OpenVZ VPS

上次看到的主要是RAM Host旗下的TinyVZ推出的,价格便宜,年付$15,上网查了一下,貌似RAM Host的口碑还行,虽然OpenVZ有超售的风险,但是自己还没有怎么接触过VPS,觉得还是弄个尝尝鲜,看了一下,配置的主要瓶颈是内存:独立内存(Dedicated RAM)128MB,突发内存(Burstable RAM)256MB。其他还好吧,准备跑个DNS服务器,BIND系的估计是跑不了了,网上找了一个maradns的DNS Server,中文资料还真少,捣鼓了半天,没配置好,索性卸载了。

咱不搞DNS服务器了,搞个WEB服务器,放个WordPress。思来想去,内存这么小,只能按精简的方式配置了,参考了lowendbox的《Yes, You Can Run 18 Static Sites on a 64MB Link-1 VPS》这篇文章,再结合网上搜索的一些结果,配置了Debian 5.0 x86 + Nginx + MySQL + PHP的WEB服务器,最后内存被消耗掉100左右,不晓得最后28MB的独立内存和125MB的突发内存能支撑多大访问量。

配置完毕后,申请监控宝每15分钟监控一次服务器,但昨天晚上出现了无法访问的情形,查看RAM Host News,得知其服务器遭到了拒绝服务(DoS)的攻击,导致服务器离线,杯具了,今天晚上貌似又出故障了,希望RAM Host能够妥善解决吧。

突然感到Linux配置服务器真的很省资源,我在考虑要不要把一台装有Windows Server 2008的服务器系统换成Linux的,因为那台服务器内存也不大,才4GB,所有服务上线后感觉很吃力。

好吧,先写到这儿,这个VPS再监控一段时间,没有问题的话,我将试着将博客转过去,实在不稳定的话,只有拿来练习Linux了。

Debian/CentOS VPS安装PHP加速器eAccelerator笔记

1.什么是eAccelerator?

摘自百度百科:eAccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。 它还有对脚本起优化作用,以加快其执行效率。使您的PHP程序代码执效率能提高1-10倍。

总体上说是一款加速PHP执行速度的扩展,具体效果,我试下来觉得还是不错的。

2.如何获取eAccelerator?

大家可以到其官方主页上去下载最新版本。但是遗憾的是不晓得为什么,官方首页最近变成了Apache的默认页了,最新的eAccelerator版本应该是eaccelerator-0.9.6.1.tar.bz2,官方下载地址是:http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2,但是这个地址也用不了,所以我先临时提供一个下载地址:

http://orpin.org/downloads/source/linux/eaccelerator/eaccelerator-0.9.6.1.tar.bz2
md5sum 32ccd838e06ef5613c2610c1c65ed228
sha1sum c95e87229a6e674b4994d4fc13278e516ea314f9

3.如何安装并使用?

3.1 准备工作

首先需要make模块,大多数Linux系统都自带了这个模块,没有的通过下面的命令安装:

继续阅读