esayr's blog 有友共尊田舍酒,无事面对古人书

20十一/080

SAS vs SATA2 读写速度测试

两机器,CPU及其它硬件基本一致

复制文件
命令:time cp ubuntu-8.10-server-i386.iso* soft/

SAS 1.5万转硬盘
real 0m5.739s
user 0m0.010s
sys 0m3.160s

SATA 7200转硬盘
real 0m48.345s
user 0m0.050s
sys 0m7.750s

--------------------------------------
压缩两个600M的ISO文件
命令:time tar cjvf ubuntu-8.10-server-i386.iso* a.tar.gz

SAS 1.5万转硬盘
real 3m5.572s
user 3m3.770s
sys 0m2.430s

SATA 7200转硬盘

real 8m26.911s
user 8m9.830s
sys 0m5.860s

压过程中,用top看CPU占用,都只有一个CPU在跑,不知道怎么使tar命令使用多核(/线程)
各raid方式的数据,我明天测试后补充.

6九/08

nginx的wordpress 及DZ论坛rewrite规则

wordpress 2.*版本:

location / {
if (!-e $request_filename) {
rewrite ^([_0-9a-zA-Z-]+)?(/wp-.*) $2 last;
rewrite ^([_0-9a-zA-Z-]+)?(/.*\.php)$ $2 last;
rewrite ^ /index.php last;
}
}
Discuz! 6.1.*版本:

location /{
rewrite ^/archiver/((fid|tid)-[\w\-]+\.html)$ /archiver/index.php?$1 last;
rewrite ^/forum-([0-9]+)-([0-9]+)\.html$ /forumdisplay.php?fid=$1&page=$2 last;
rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /viewthread.php?tid=$1&extra=page%3D$3&page=$2 last;
rewrite ^/space-(username|uid)-(.+)\.html$ /space.php?$1=$2 last;
rewrite ^/tag-(.+)\.html$ /tag.php?name=$1 last;
break;
}

18八/08

当 nginx 遇上500 Internal Server Error

如果你的nginx不管什么版本,在提交小的数据正常,而提交大数据数会出现500 Internal Server Error

那么,你赶紧看看磁盘空间吧.80%的原因是有个磁盘分区占用100% .

之前朋友遇到过,解决了.

我今天也遇到,查了N多资料,无解.突然想到....

果然,日志所有分区满了. 删除一些日志后,一切回归正常.

13十二/07

linux 下配置resin3.1.* +apache 2.2 出错的解决办法

配置 resin3.1.4时,死活编译不过去。如下:
esayr@ifone:/usr/local/resin$ make
(cd modules/c/src; make)
make[1]: Entering directory `/usr/local/resin/modules/c/src'
for dir in common apache2 resin_os; do (cd $dir; make); done

7十二/071

apache2.0的mod_vhost_alias模块配置多虚拟主机教程

前段发在phpv上的,忘了放这来了。

 ---------------------------------------------

前言:我有几台服务器托在机房,连年亏损. 我想我应该考虑将他们向外出租.准备明年运营,以扭转几年来尴尬的局面.于是,就有了这个教程.

目标:

1.用户开通FTP后,自动在/www/下创建一个与域名同名的目录.
(假如phpv.net的管理员购买空间后,他的主目录将是 /www/phpv.net)
2.空间知道泛域名绑定.
(即:访问者在浏览器内输入www.phpv.net将会自动访问/www/phpv.net/www.phpv.net目录下的index文件.而输入bbs.phpv.net则访问/www/phpv.net/bbs.phpv.net/这个目录.....)

按以前的,我得挨个绑虚拟主机.然后再restart apache
像这样:

<VirtualHost *:80>
    ServerAdmin webmaster@phpv.net
    DocumentRoot /www/phpv.net/www.phpv.net
    ServerName www.phpv.net
    ErrorLog logs/phpv-error_log
    CustomLog logs/phpv-access_log common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@phpv.net
    DocumentRoot /www/phpv.net/bbs.phpv.net
    ServerName bbs.phpv.net
    ErrorLog logs/bbs-phpv-error_log
    CustomLog logs/bbs-phpv-access_log common
</VirtualHost>

...............

#apache restart

简直太烦人太累了.

后来经过自己的测试和多位好友的帮助,我使用Apache 的 mod_vhost_alias模块.完美实现了这个要求.


我是这样开始的:

1.把原来的虚拟主机配置都删除掉, NameVirtualHost *:80 这句也加上个#在它前面.

2.接着,在httpd.conf使用下面的mod_vhost_alias配置

UseCanonicalName Off
VirtualDocumentRoot /www/%2+/%0

(注意:以上/www/是我的网站根目录,在实现操作中请按自己要求更改.)

重启apache.
#apache restart

3.测试
使用FTP服务器的功能,使得用户登录时,自动以其域名创建主目录.(我用的是 pureftpd 具体配置请参阅相关文献)
以刚刚创建好的FTP用户登录,在目录下创建文件夹www.phpv.net 上传一个phpinfo的index.php
输入http://www.phpv.net 看看是否正常. (域名的A记录要指向本机IP) 如果能正常显示出info信息,就表明成功了.

4.但,问题来了,使用http://phpv.net 访问的却是 /www/net/phpv.net这个目录.
想使用rewirte做一个自动跳转来解决这个问题,使得用户输入http://phpv.net时能访问到/www/phpv.net/www.phpv.net 这个目录

rewirte解决方式:

加以下rule到http.conf中

RewriteEngine On
#RewriteCond %{HTTP_HOST} ^w+.w{1,3}$
RewriteCond %{HTTP_HOST} ^[a-z-0-9]+.w{1,3}$RewriteRule (.*) http://www.%{HTTP_HOST}$1 [R=301,L]

再次重启Apache,访问http://phpv.net,自动跳转到http://www.phpv.net

5.相关问答:
如果把不需要执行PHP的目录禁用PHP解析?

这样:
<Directory "/www/phpv.net/manual.phpv.net">
php_flag engine off
</Directory>

好了.配置基本OK.

感谢:fluck boban 吴洪声 对本文的贡献.

附后:此配置基本能满足大部分用户的需求.
但有以下缺点:不能根据虚拟主机做个性化设置,比如,设置一个虚拟主机的PHP执行目录范围.
还有不能自动绑定两个域名到同一目录.

25五/070

搜狗这个坏蛋

服务器感觉很忙的样子,但已经没什么很大流量的东西在跑了呀。

查看连接
server# netstat -an | sort -d | wc -l
2267

#netstat -na|grep 80|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -d

也没什么大不了的连接。

看apache日志 ,发现几个连接。一直访问个没完。
220.181.19.96
220.181.19.85
......

一查IP,

  • ·本站主数据: 北京市 电信IDC
  • ·本站辅数据: 北京 搜狗蜘蛛 [提供:邢台 荣晓东]

    太狠了。google一看,受害者不少。[1] [2] [3]
    是技术问题还是怎么着。派了一堆蜘蛛出来。真服了。

    整个IP段deny 掉,这回清净啦!
    server# netstat -an | sort -d | wc -l
    287

  • 24五/070

    个人感受:freebsd 和 linux 的一点区别

    这一月来因为要将三四台正在使用中的服务器操作系统由windows 2003换成开源的.

    然后得出以下对比.

    目标:安装GD图片处理库.

    freebsd 是
    # cd /usr/ports/graphics/gd
    #make install

    然后就等着完成.

    linux是

    wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.11.tar.gz
    tar zxvf libiconv-1.11.tar.gz
    cd libiconv-1.11
    ./configure --prefix=/usr/local
    make install

    wget http://jaist.dl.sourceforge.net/sourceforge/freetype/freetype-2.1.10.tar.gz
    tar zxvf freetype-2.1.10.tar.gz
    cd freetype-2.1.10
    ./configure --prefix=/usr/local
    make install

    wget http://www.ijg.org/files/jpegsrc.v6b.tar.gz
    tar zxvf jpegsrc.v6b.tar.gz
    cd jpeg-6
    ./configure --prefix=/usr/local
    make install
    make install-lib

    wget http://nchc.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.9beta9.tar.gz
    tar zxvf libpng-1.2.9beta9.tar.gz
    cd libpng-1.2.9beta9
    ./configure --prefix=/usr/local
    sudo make install
    wget http://www.boutell.com/gd/http/gd-2.0.33.tar.gz
    ./configure --prefix=/usr/local
    make install

     觉得挺无奈的,谁有更好的办法?

    24五/071

    mysqldump 导出的sql文件导入时提示Unknown command ‘\[‘.

    两台linux机器的mysql配置一模一样。
    #mysqldump forum>forum.sql -u root -p
    导出一个2.4G大的forum.sql文件,然后试图导入内网(192.168.0.8)的另一台机器时,出现问题

    #mysql forum<forum.sql -u root -p -h 192.168.0.8
    Enter password:
    ERROR at line 1410: Unknown command '\['.

    首先是怀疑有二进制,添加参数--hex-blob 再导,问题依旧。
    再想也不可能是字符集什么呀 。
    请教imysql,说是: 2边的max_allowed_packet设置的不一样.
    明明是一样的,改大一些试试。16M改成64M,也不行。
    最后拉到本机去,终于可以正常导入。
    问题虽然解决,但根源是什么还是没弄懂。
    哪个老师知道此问题的原因,请赐教。

     

    最后,学到一个简单的服务器间复制库的办法。
    mysqldump -hhost1 xx | mysql -hhost2
    从host1导出库xx,然后写入host2

    22五/070

    架构基于DZ或PW论坛的文件防盗链系统

    需求:
    一个技术/娱乐论坛 http://bbs.mowai.com 有大量电影和ISO文件。
    文件存放于论坛目录下,结构如下:

    /bbs/download/蜘蛛侠3.rm------电影和ISO文件
    /bbs/index.php---------------论坛首页
    /bbs/...
    /index.php -------------------首页

    原来使用 http://bbs.mowai.com/download/蜘蛛侠3.rm 这样的链接提供用户下载文件.
    但被无良的迅雷和一些网站等严重盗链.服务器带宽被耗尽, 急需解决.

    1.尽量不改变原有下载路径.否则需要编辑大量主题.
    2.可以设置非网站注册会员需要登录方可下载.

    思路:
    一.和论坛绑定,需要引入论坛文件以判断用户是否登录.
    二.如果没有限制游客下载,那么需要判断HTTP_REFERER是否来自本站,以达到简单防盗功能.
    三.[重点] 为了防盗,最简单的方法还是更改文件名.一个文件,一天就失效了.那盗链就变得没有意义.

    开始实施:
    1.
    ---------------------------------------------------------------
    新建一个文件夹 /bbs/download_file_in_here ,并在它下面建立一个乱码文件夹,如De7Tvs9K 将 /bbs/download/ 目录下的所有文件移动到/bbs/download_file_in_here/De7Tvs9K 下,
    并给它绑定一个域名:http://download.mowai.com
    ---------------------------------------------------------------

    2.
    ---------------------------------------------------------------
    加一条 rewirte 到虚拟主机设置里.

    <Directory "/www/bbs.mowai.com">
    <FilesMatch "^download$">
    ForceType application/x-httpd-php
    </FilesMatch>
    </Directory>

    也可以写 .htaccess 文件来实现.目的是实现用PHP来处理download文件
    ---------------------------------------------------------------

    3.
    ---------------------------------------------------------------
    新建一个 time.txt 文件,位于 /bbs/ 目录下.内容为:De7Tvs9K 就是上面那个乱码文件夹
    ---------------------------------------------------------------
    新建一个名为 download 的php文件在 /bbs/ 目录下(注意,这个文件没有后缀名)
    代码如下:

    <?php

    header('Content-type:text/html;charset=utf-8');
    define('CURSCRIPT', 'download');
    require_once
    './include/common.inc.php';

    $down_uri = 'http://download.mowai.com/'; //绑定的域名 以/结尾
    $allow_guest_download = 1; //是否允许游客下载 1=是 0=否
    $referer_verify = 1; //是否验证referer来源.在允许游客下载的情况下,是否允许非本站用户下载.
    $referer_uri_list = array('www.phpv.net','esayr.com'); //允许的referer来源网站.上一项值为1时生效.
    $interval_time = 24; //间隔多少个小时,更改一次文件夹名。

    $filename = 'time.txt'; //保存文件夹路径的文本文件.if (file_exists($filename)) {
    $last_m_time = filemtime($filename);
    $directory_name = file_get_contents($filename);

    //判断时间是否到期
    if(time() - $last_m_time > $interval_tim*3600 ) {
    $new_directory_name = random(12);

    if (is_writable($filename)) {
    if (!
    $handle = fopen($filename, 'a')) {
    exit(
    "不能打开文件 $filename");
    }

    //更改文件夹名
    if (rename("bbs/".$directory_name, "bbs/".$new_directory_name)) {

    //将新的目录名写入到time.txt文件中。
    if (fwrite($handle, $new_directory_name) === FALSE) {

    //如果改文件内容失败,把文件夹名改回来
    rename("bbs/".$new_directory_name,"bbs/".$directory_name);

    exit("不能写入到文件 $filename");
    }
    $directory_name = $new_directory_name;

    } else {
    exit("文件夹改名失败");
    }
    fclose($handle);

    } else {
    exit("文件 $filename 不可写");
    }
    }

    }else{
    exit('文件 $filename 不存在,请创建一个'); //没有time.txt文件,请创建一个。
    }

    /*################### 游客检查 #############*/
    if(!$allow_guest_download && !$discuz_uid) {
    //exit('此操作需要登录!您尚未 <a href="http://bbs.mowai.com/logging.php?action=login">登录</a>');
    header("Location: http://www.mowai.com/error/need_login.html");
    exit;
    }

    /*################### 来源检查 #############*/
    preg_match("/https?:\/\/([^\/]+).*/i", $_SERVER['HTTP_REFERER'],$matchs);

    if($referer_verify && !in_array($matchs[1],$referer_uri_list)) {

    header("Location: http://www.mowai.com/error/invalidreferer.html");
    //exit('您要下载的文件位于http://bbs.mowai.com');

    }else{

    if(isset($_SERVER['PATH_INFO'])){

    //这里可以加一些判断文件是否存在而出现错误提示的信息。
    header("Location:{$down_uri}{$directory_name}/{$_SERVER[PATH_INFO]}");
    }
    else {

    header("Location: http://www.mowai.com/error/404.html");
    }
    }

    ?>

    代码在linux+DZ5.5.0 下运行成功.

    需要注意的几点
    如果是*nix系统,请将time.txt的文件属性设置为777
    如果要下载的文件在远程计算机,请使用PHP的FTP命令来做更名操作.
    PW论坛,根据情况改改代码就行了.