项目需求:
现在基本环境:
日均百万PV的导航站,静态页面,服务器环境IIS,配合10M CDN,实际上经常超出至18M左右,因此费用也不低,并且CDN节点有时会出问题,还 需要每次的更改后刷新CDN,不太方便。
改造后期望:
配置独立服务器,升级带宽,更改环境以支持PHP的程序,实现本地化的广告投放功能,以扩展自有化。

具体实现:
下面将记录实现过程的点滴,期间得益于互联网上许多资料的帮助,在此一并表示感谢。此文章力争做到细致,清晰,希望对后来者起到一定帮助作用。

一,服务器方面
1,服务器选择
根据项目所需,具体业务情况,选择为CPU较高,内存一般,硬盘一般,主板较好,较稳定的1U服务器,最后定为DELL R410。
2,服务器基本环境
Centos+apache+php+mysql
3,开始安装,选择F11进入启动选择,选择2 SATA OPTICAL启动模式,即为从光驱启动,提示找不到光盘,可以重新放置,调整位置,一般均为 不能正确读盘造成。
4,安装完毕后,发现网卡工作不正常,驱动没有正常安装,查找网上文章,下载最新BCM5716驱动,安装均未能成功,怀疑是LINUX内核版本问题。
5,centos5.2—>centos5.4后安装完毕,网卡装上,但不稳定,是因为固件支持文件所引起
yum upgrade 升级内核及一切必要升级的组件,保证环境为最新
下载dell最新补丁,并安装,过程中可能需要其它组件支持,均使用yum安装即可
wget http://ftp.us.dell.com/network/NETW_FRMW_LX_R239524.BIN
 chmod +x NETW_FRMW_LX_R239524.BIN
 ./NETW_FRMW_LX_R239524.BIN
注意过程的完整性,完毕后,重启,设置IP,工作正常。

二,软环境方面

1,基本环境实现
具体安装配置请参考,配置服务器环境那篇文章
2,转移项目,使用了SVN,配置项目环境,smarty,adodb,建立MVC工作模式,具体参考之前文章

三,测试方面

为了实现项目需求,此部分也是重点部分,过程中碰到一些问题,也累积了一些经验。
1,安装 webbench进行压力测试
首先下载tar包

tar -zxvf webbench-1.5.tar.gz
  cd webbench-1.5
  make && make install
  webbench –help
 webbench [option]… URL
   -f|–force               Don’t wait for reply from server.
   -r|–reload              Send reload request - Pragma: no-cache.
   -t|–time           Run benchmark for seconds. Default 30.
   -p|–proxy Use proxy server for request.
   -c|–clients          Run HTTP clients at once. Default one.
   -9|–http09              Use HTTP/0.9 style requests.
   -1|–http10              Use HTTP/1.0 protocol.
   -2|–http11              Use HTTP/1.1 protocol.
   –get                    Use GET request method.
   –head                   Use HEAD request method.
   –options                Use OPTIONS request method.
   –trace                  Use TRACE request method.
   -?|-h|–help             This information.
   -V|–version             Display program version.
 具体方法:
 webbench -c 3000 -t 60 http://localhost/index.html


60秒内3000个访问,此时可以用IE访问该链接,看看是否速度正常。。

2,apache测试
经测试,在压力情况下,并不能很好支持服务,于是修改了最大连接数
查看当前的连接数可以用:
ps aux | grep httpd | wc -l

或:
pgrep httpd|wc -l控制最大连接数的MaxClients ,因此可以尝试配置为:
<IfModule mpm_prefork_module>
                StartServers                      5
                MinSpareServers                   5
                MaxSpareServers                  10
                ServerLimit                    5500
                MaxClients                     5000
                MaxRequestsPerChild               100
</IfModule>
注意:MaxClients默认最大为250,若要超过这个值就要显式设置ServerLimit,且ServerLimit要放在MaxClients 之前,值要不小于MaxClients,不然重启httpd时会有提示。  

经以上修改后,重启服务,上线后,稍一会就打不开了,apache在多用户并发的情况下处理的并不理想。

3,更改环境nginx提供WEB服务
由于centos没有默认的nginx软件包,需要启用REHL的附件包

 rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
yum -y install nginx  
设置开机启动
chkconfig nginx on
安装spawn-fcgi来运行php-cgi

yum install spawn-fcgi
下载spawn-fcgi 的启动脚本
wget http://bash.cyberciti.biz/dl/419.sh.zip
unzip 419.sh.zip
mv 419.sh /etc/init.d/php_cgi
chmod +x /etc/init.d/php_cgi
启动php_cgi
/etc/init.d/php_cgi start
查看进程
netstat -tulpn | grep :9000
若出现如下代表一切正常
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 4352/php-cgi

然后要配置php.ini
去掉;使之生效
cgi.fix_pathinfo=1
加上;
; doc_root =

也可单独安装nginx0.8.15
 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers
 tar zxvf nginx-0.8.15.tar.gz
 cd nginx-0.8.15/
 ./configure –user=www –group=www –prefix=/usr/local/webserver/nginx –with-http_stub_status_module –with-http_ssl_module
 make && make install
 cd ../ 
 rc.local里加入/usr/local/webserver/nginx/sbin/nginx

开机自启动服务
可用

ps -ef | grep “nginx: master process” | grep -v “grep” | awk -F ‘ ‘ ‘{print $2}’

查看当前nginx进程情况,我是装了两个,如果都起来,则有两个pid进程,要确定哪个是0.8.15的,然后做完修改好
要重启生效

kill -HUP 12996
 配置虚机
 server {
         listen       81;
       
         server_name  www.abc.com ;
  root   /work/site/www/abc/docs;
 #如下必须加上index.php否则有可能出现403forbidden错误
             index  index.html index.htm index.php;
 gzip on;
 gzip_min_length 1k;
 gzip_buffers 4 16k;
 gzip_http_version 1.0;
 gzip_comp_level 2;
 gzip_types text/plain application/x-javascript text/css application/xml;
 gzip_vary on;        location ~ /.php$ {
         
  #fastcgi_pass  unix:/tmp/php-cgi.sock;
       fastcgi_pass  127.0.0.1:9000;
       fastcgi_index index.php;
 #如下 必须加上这一行,是指定script_filename, 否则有可能返回404没有找到的错误
 fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
 #fastcgi_params文件不用修改
       include fastcgi_params;
         }
     }同时可配置error页面。
 配置status状态监测页面
 server
   {
     listen  80;
     server_name  status.abc.com;
  location / {
     stub_status on;
     access_log   off;
     }
   }解决500错误
 vi /etc/nginx/nginx.conf
 events {
     worker_connections  1024;
 }
 调整为
 events {
     worker_connections  10240;
 }cat /proc/sys/fs/file-max
 ulimit -n 改为上面的大数
vi /etc/profile
 添加
 ulimit -HSn 大数source /etc/profile
 
 配置完成后,要kill -HUP 11223重启nginx,访问php正常。。。也可以同在0.6.39中配置,一样通过81也正常,别忘了更改selinux端口生效。为了开机自启动NGINX相关的服务必须在rc.d/rc.local中加入:
ulimit -n 163672
 /etc/init.d/php_cgi start
 /usr/local/webserver/nginx/sbin/nginx
 注意先后顺序,否则可能出现502网关错误或500打为开错误。

 

ls -l查看文件 所属
给nginx开通session的管理权限,很重要,使PHP中应用的SESSION能够起作用
默认安装的nginx通过make就会有一个nginx的用户,要给它加上使用session的权限
chown -R nginx /var/lib/php/session
这样就可以在nginx中结合php使用session了,至此,原在apache中运行的项目就移植到nginx中了,同时80,81,82均正常,对 外使用80,通过status查看
Active connections: 7658
连接数在7000多时,正常访问!!!
当然为了本地化的实现,是用php分析地区来源然后跳到对应地区页面上,在框架里,所以前端访问还是域名。

四,总结补充

综上,基本可以配置出支持日均百万PV的网站架构。过程中可能有不详细的地方,稍后不断补充,丰富。
开通vsftp
1,创建用户
useradd bjh2o -d /work/site/bjh2o.com -m
2,设置密码
passwd bjh2o
XXX
3,修改/etc/vsftpd/chroot_list
加入bjh2o

给bjh2o这个ftp用户操作相应目录的权限
chown -R bjh2o /work/site/bjh2o.com

4,配置站点http.conf

5,重启web,vsftpd服务

作者:程式飞扬