理想论坛的硬件具体情况

MySQL服务器: DualXeon 5335/8GB内存/73G SAS硬盘(RAID0+1)/CentOS5.1-x86_64/MySQL5

三台WEB服务器如下:

N1. Dual Xeon 3.0 2GB 内存

N1. Dual Xeon 3.0 4GB 内存

N1. Dual Xeon 3.0(双核) 4G内存

另外有三块300G的SCSI硬盘准备做RAID5,用来存放附件,四台机器通过内网连接

猪头考虑过的解决方案如下:

1. ZEUS + PHP5 + eAccelerator

2. squid + Apache2 + PHP + eAccelerator

3. nginx + PHP(fastcgi) + eAccelerator

4. nginx + Apache2 + PHP + eAccelerator

第一个方案,属于比较完美的,而且很稳定,但是最大的问题是ZEUS是收费软件,用盗版总会受良心责备的,所以暂时押后做候补方案

第二个方案,squid转发请求给Apache2,很多网站都采用这种方式,而且效率也非常高,猪头也测试了一下,但是问题非常严重,因为squid是把文件缓存起来的,所以每一个访问过的文件,squid都要把它打开,理想论坛拥有150G的附件,而且访问量巨大,这种情况下只有打开squid,机器很快就会因为打开文件过多而拒绝响应任何请求了,看来也不适合,只适合缓存文件只有几百M以内的网站.

第三个方案,猪头对第三个方案的测试结果是访问量大的时候,PHP经常会出现bad gateway,看来通过TCP连接Fastcgi执行PHP的方法不够稳定,猪头也测试了通过Unix Socket连接执行PHP,同样还是不稳定.

对比之下,猪头目前使用了第四种解决方案.

Apache2的安装。

(由于服务器采用FreeBSD7,所以大部分软件将会通过ports安装)

由于Apache2只需要处理PHP请求,所以其他模块基本上都不需要,所以不要选择安装其他模块,即使rewrite也不需要,因为rewrite将会在nginx上面实现,如果熟悉,还可以修改Makefile删掉不需要的部分,这样经过优化之后,apache将会以最稳定最高效的方式处理PHP请求

make install clean

修改press=1

eaccelerator.compress_level=9

eaccelerator.keys=shm_and_disk

eaccelerator.sessions=shm_and_disk

eaccelerator.content=shm_and_disk

建立缓存目录以及修改权限

mkdir /tmp/eaccelerator

chmod 777 /tmp/eaccelerator

chown nobody:nobody /tmp/eaccelerator

nginx的安装以及配置

cd /usr/ports/www/nginx

make install

有几个module是我们需要的,要选上

HTTP module

bined;

limit_conn one 5;#限制一个IP并发连接数为五个

error_page 404 /404.html;

error_page 403 /403.html;

location /status {

stub_status on;

access_log off;

auth_basic NginxStatus;

auth_basic_user_file conf/htpasswd;

}

#在根目录使用Discuz6.0 rewrite规则,如果你的论坛在二级目录下面,则要相应修改location

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;

error_page 404 /404.html;

error_page 403 /403.html;

}

#对附件做防盗链,没有正确的referer将会返回403页面

location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ {

valid_referers none blocked server_names *.55188.net *.55188.com;

if ($invalid_referer) {

rewrite ^/

}

}

#转发PHP请求到本地的81端口,让Apache处理.

location ~ \.php$ {

proxy_pass http://127.0.0.1:81;

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_hide_header Content-Type;

}

}

}

测试一下你的配置文件是否都正确

/usr/local/sbin/apachectl configtest

/usr/local/sbin/nginx -t

都没问题的话就启动服务器吧

/usr/local/sbin/apachectl start

/usr/local/sbin/nginx -c /usr/local/etc/nginx/nginx.conf

浏览一下主页,应该正常了