日期:2012-04-03 01:34:00  来源:本站整理

关于大型论坛系统环境搭建(20万日IP负载均衡实战)–Nginx+Apache2+PHP+MySQL[服务器安全]

赞助商链接



  本文“关于大型论坛系统环境搭建(20万日IP负载均衡实战)–Nginx+Apache2+PHP+MySQL[服务器安全]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

作者:猪头
版权没有,欢送转载,转载请勿注明出处
(本文只针对Discuz论坛系统谈论,由于软件包更新速度对比快,你看本贴的时刻大概已经是利用新版本的软件包了,安装办法大概不一致,具体请查看软件包的README文件)

测试环境:抱负论坛(55188).
抱负论坛为国内助气最旺的股票论坛,注册会员已超越100万,并以每月60000人的速度安定递增,每日页面拜候量超越200万,并保持安定增长的趋 势,60分钟在线平均约2万多人,最高记录3万3千多. 目前主题超越30万,帖子接近1千万,数据库大小5.8GB,附件总大小大约150GB
之前抱负论坛有三台服务器,两台WEB服务器以及一台数据库服务器,拜候已经渐渐呈现瓶颈,在猪头的倡议下,站长决意增添一台服务器放数据库,别的三台做WEB,并且对原有的服务器的操作系统举行进级.
硬件具体情形
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恳求

cd /usr/ports/www/apache20
make install clean

改正httpd.conf(这里仅列出要改正/增添的部份)
vi /usr/local/etc/apache2/httpd.conf
把KeepAlive On改正成KeepAlive Off,在下面增添
ServerLimit 2048
MaxClients增添到512
Listen 127.0.0.1:81 #由于httpd服务器不需求对外开放,仅仅处理nginx转发过来的PHP恳求,所以仅仅需求监听本地的端口.
别的增添对PHP的支持
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
至于增添虚拟主机的部份将不再罗嗦,注意虚拟主机也监听本地81端口便可以了

PHP5的安装(GD库等模块请提早装好)
cd /usr/ports/lang/php5
改正一下Makefile,把需求的东西加上去吧
本来应当有这样一段的

CONFIGURE_ARGS= \
–with-layout=GNU \
–with-config-file-scan-dir=${PREFIX}/etc/php \
–disable-all \
–enable-libxml \
–with-libxml-dir=${LOCALBASE} \
–enable-reflection \
–program-prefix=”"

我们要把它改正成

CONFIGURE_ARGS= \
–with-layout=GNU \
–with-config-file-scan-dir=${PREFIX}/etc/php \
–disable-all \
–enable-libxml \
–with-libxml-dir=${LOCALBASE} \
–enable-reflection \
–program-prefix=”" \
–with-config-file-path=/etc –enable-mbstring –enable-ftp –with-gd –with-jpeg-dir=/usr/local –with-png-dir=/usr/local –enable-magic-quotes –with-mysql=/usr/local –with-pear –enable-sockets –with-ttf –with-freetype-dir=/usr/local –enable-gd-native-ttf –with-zlib –enable-sysvsem –enable-sysvshm –with-libxml-dir=/usr/local –with-pcre-regex –enable-xml

make install clean
cp work/php-5.2.5/php.ini-dist /etc/php.ini

安装eAccelerator
cd /usr/ports/www/eaccelerator
make install clean
把以下部份增添到php.ini尾端:

extension_dir=”/usr/local/lib/php/20060613/”
extension=”eaccelerator.so”
eaccelerator.cache_dir=”/tmp/eaccelerator”
eaccelerator.shm_size=”64″
eaccelerator.enable=”1″
eaccelerator.optimizer=”1″
eaccelerator.check_mtime=”1″
eaccelerator.debug=”0″
eaccelerator.filter=”"
eaccelerator.shm_max=”0″
eaccelerator.shm_ttl=”60″
eaccelerator.shm_prune_period=”60″
eaccelerator.shm_only=”0″
eaccelerator.compress=”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
http_addition module
http_rewrite module
http_realip module
http_stub_status module

其他的看自己需求了
改正配置文件
vi /usr/local/etc/nginx/nginx.conf

user nobody nobody;
worker_processes 4;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid /var/log/nginx.pid;
events {
worker_connections 10240;
}
http {
include mime.types;
default_type application/octet-stream;
limit_zone one $binary_remote_addr 10m;
#log_format main ‘$remote_addr – $remote_user [$time_local] $request ‘
# ‘”$status” $body_bytes_sent “$http_referer” ‘
# ‘”$http_user_agent” “$http_x_forwarded_for”‘;
sendfile off;
tcp_nopush off;
#keepalive_timeout 0;
keepalive_timeout 10;
gzip off;

server {
listen 80;
server_name www.55188.net www.55188.com www1.55188.com www2.55188.com 55188.com 55188.net www.55188.cn 55188.cn bbs.55188.net bbs.55188.com bbs.55188.cn;
index index.html index.htm index.php;
root /home/www;
access_log /dev/null combined;
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 ^/ http://www.55188.com/403.html;
}
}

#转发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

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

后继谈论,
1.数据库.
数据库的编译安装不再反复谈论,仅仅谈论环境,由于抱负论坛的数据库对比大,并且发展对比快,所以要作对比前一点的预算,硬盘需求利用15K RPM的SAS硬盘做RAID0+1,操作系统需求利用64位版本,因为服务器需求8GB内存,要注意的时,利用了64位系统之后部份对比老的软件大概你 无法找到64位的版本,这台机械就专门做MySQL服务器吧,假如数据库超越10G,应当考虑MySQL_Cluster

2.附件.
因为有三台服务器做WEB,所以附件要利用nfs的方法通过内网举行同享,至于若何设置nfs这里不再谈论,假若有不懂得的请将学费交给Google

3.WEB.
由于三台机械硬件配置不一致,所以有必要考虑一下负载均衡的问题,nginx本身附带有负载均衡的功效,但是假如启用负载均衡的功效的话,每台机械都将会 把客户端恳求的数据缓存到本机,这样增添了硬盘的IO,关于抱负论坛的拜候量来说,这是个不小的开销,最后我们是利用DNS查询的方法来分配流量, 通过差别的A记录,配置好点的机械,多分一条A记录,配置差的就少一条A记录,这样从整体上看,流量分配应当对比均衡.

4.关于nginx并发衔接
猪头给nginx限制了每个IP的并发衔接,因为关于大论坛来说,老是对比出名的,不说人家攻击你什么的.采集都分外多,假如不限制,很简单出问题,常常会招致PHP罢工.

以上只是猪头愚见,假若有其他进展,猪头会更新本贴,若有疑问大概差别见解,欢送提出谈论

当然还有很多很猖獗的办法,比方说把WEB文件(附件除外)全部放内存里面,MYSQL假如小于5G,也可以全部放内存里面,不过这些办法都是太极度的了,优化效果须然好,但是风险很大
  以上是“关于大型论坛系统环境搭建(20万日IP负载均衡实战)–Nginx+Apache2+PHP+MySQL[服务器安全]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 关于大型论坛系统环境搭建(20万日IP负载均衡实战)–Nginx+Apache2+PHP+MySQL
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .