读书人

基于CentOS 5.4筹建nginx+php+spawn-f

发布时间: 2012-10-14 14:55:07 作者: rapoo

基于CentOS 5.4搭建nginx+php+spawn-fcgi+mysql

基于CentOS 5.4搭建nginx+php+spawn-fcgi+mysql高性能php平台???????? 作者:pkfeiyang??? 主页:pkfeiyang.cublog.cn


??? 首先介绍下支持php的cgi有php-fpm和spawn-fcgi 目前比较常用
对于php-fpm支持cgi的安装lemp安装详解:http://blog.chinaunix.net/u3/103362/showart_2301020.html

下面主要介绍
nginx+php+spawn-fcgi+mysql?
?什么是spawn-fcgi?
spawn-fcgi是一个通用的FastCGI管理服务器

?? 她是lighttpd中的一部份,但目前已经单独成为一个项目,最新的lighttpd没有这一块,但可以在以前版本中找到她在lighttpd-1.4.15( http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz )中就有她Note注:最新的spawn-fcgi可以到lighttpd.net网站搜索“spawn-fcgi”找到她的最新版本发布地址目前她的下载地址是http://redmine.lighttpd.net/news/2 最新版本是http://www.lighttpd.net/download/spawn-fcgi-1.6.0.tar.gz

下载软件包:

下载软件包:
?? ? pcre 下载
?? wget http://downloads.sourceforge.net/project/pcre/pcre/8.10/pcre-8.10.tar.gz
? ?? nginx 下载?
?? wget http://nginx.org/download/nginx-0.8.49.tar.gz
???? gd库下载
?? wget http://www.libgd.org/releases/gd-latest.tar.gz
???? lib库下载
?? wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.tar.gz
? wget http://cdnetworks-kr-1.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.bz2
???? 算法需要的
?wget http://acelnmp.googlecode.com/files/mhash-0.9.9.9.tar.gz
?
?wget http://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
?wget http://downloads.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
?wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.48.tar.gz
?wget http://php-fpm.org/downloads/php-5.2.13-fpm-0.5.14.diff.gz
?wget http://cn.php.net/get/php-5.3.3.tar.gz
?wget http://pecl.php.net/get/memcache-2.2.5.tgz
?wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
?wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2

? 添加用户名
?71? useradd www
?? 72? groupadd www
?? 73? usermod -a -G www www
?? 74? mkdir -p /website/web001
?? 75? chmod +w /website/web001/ -R
?? 76? chown www:www /website/web001/ -R
?? 77? useradd web001
?? 78? usermod -g web001 www
?? 79? chown -R web001:www /website/web001/
调节时间
crontab -e
加入:15 3 * * * /usr/sbin/ntpdate 210.72.145.44 >/dev/null 2>&1

安装需要的软件包:
?yum -y install ntp vim-enhanced gcc gcc-c++ gcc-g77 flex bison autoconf automake bzip2-devel ncurses-devel opens
sl-devel libtool* zlib-devel libxml2-devel libjpeg-devel libpng-devel libtiff-devel fontconfig-devel freetype-devel?
libXpm-devel gettext-devel curl curl-devel pam-devel e2fsprogs-devel krb5-devel libidn libidn-devel libevent-devel libevent?

安装mysql??


157? CFLAGS="-march=nocona -O3 -pipe"
? 158? CXXFLAGS="{CFLAGS}"
?
? 161? tar -xzf mysql-5.1.48.tar.gz?
? 162? cd mysql-5.1.48

?./configure --prefix=/usr/local/mysql5 --localstatedir=/data/mysql/data --with-comment=Source --with-mysqld-u
ser=mysql --without-debug --with-big-tables --with-charset=gbk --with-extra-charsets=all --with-pthread --enable-sta
tic --with-collation=gbk_chinese_ci --enable-thread-safe-client --with-client-ldflags=-all-static --with-mysqld-ldfl
ags=-all-static --enable-assembler --with-plugins=all --without-ndb-debug?

make
make install
useradd mysql -d /data/mysql -s/sbin/nologin
/usr/local/mysql/bin/mysql_install_db--user=mysql
/usr/local/mysql5/bin/mysqld_safe --user=mysql &(注意)
cd /usr/local/mysql
chown -R root:mysql .
mkdir -p /data/mysql/data
chown -R mysql /data/mysql/data
cp share/mysql/my-huge.cnf /etc/my.cnf
cp share/mysql/mysql.server/etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
/etc/rc.d/init.d/mysqld start

安装php

tar -xjf gd-2.0.35.tar.bz2?
? 106??
? 107? cd gd-2.0.35
? 108??
? 109? ./configure --prefix=/usr/local/gd2?
? 110? make && make install
? 111? cd ..
? 112?
? 113? tar -xjf libmcrypt-2.5.8.tar.bz2?
? 114? cd libmcrypt-2.5.8
? 115??
? 116? ./configure --prefix=/usr?
? 117?
? 118? make && make install
? 119??
? 122? tar -xzf libiconv-1.13.tar.gz?
? 123? cd libiconv-1.13
? 124? ls
? 125? ./configure --prefix=/usr?
? 126? make && make install
? 127??
? 128??
? 129? tar -xzf mhash-0.9.9.9.tar.gz?
? 130? cd mhash-0.9.9.9
? 131? ./configure --prefix=/usr?
? 132? make && make install
? 133? vi /etc/ld.so.conf
??????? 加上/usr/lib

? ?????? ldconfig
tar zxvf php-5.2.5.tar.gz(注意php-cgi 需要指定--enable-fastcgi和 --enable-force-cgi-redirect,并且好要注意php-cgi的生成和版本有关,5.2.x 的版本是可以的,5.3.x 以上集成了php-fpm 对于生成php-cgi没有多大效果)
cd php-5.2.5/
./configure --prefix=/usr/local/php-fcgi --with-config-file-path=/usr/loca/php-fcgi/etc --with-mysql=/usr/local/mysql5 --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-debug --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-force-cgi-redirect --enable-mbstring --with-mcrypt
--enable-pdo --with-pdo-mysql=shared --with-pdo-sqlite=shared (这个需要加上 如果你用pdo 来连接数据库的话)
sed -i 's#-lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt#& -liconv#' Makefile
make
make install
cp php.ini-dist /usr/local/webserver/php/etc/php.ini

编辑php.ini
?sed -i 's#extension_dir = "./"#extension_dir = "/usr/local/php-fcgi/lib/php/extensions/no-debug-non-zts-20060613/"\nextension = "memcache.so"\nextension = "gd.so"\n#' /usr/local/php-fcgi/etc/php.ini


安装memache
tar -xzf memcache-2.2.5.tgz
cd memcache-2.2.5
/usr/local/php-fcgi/bin/phpize
./configure --with-php-config=/usr/local/php-fcgi/bin/php-config
make && make install
安装eaccelerator
tar -xjf eaccelerator-0.9.6.1.tar.bz2
/usr/local/php-fcgi/bin/phpize
cd eaccelerator-0.9.6.1
/usr/local/php-fcgi/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php-fcgi/bin/php-config
安装PDO_MYSQL
tar -xzf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2
/usr/local/php-fcgi/bin/phpize
./configure --with-php-config=/usr/local/php-fcgi/bin/php-config --with-pdo-mysql=/usr/local/mysql5
make && make install
安装ZendOptimizer?这个版本高,不用安装了
tar -xzf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz

安装spawn-fcgi


#tar zvxf spawn-fcgi-1.6.3.tar.gz
#cd spawn-fcgi-1.6.3
#./configure --prefix=/usr/local/spawn-fcgi?
?make && make install
/usr/local/spawn/bin/spawn-fcgi -a 127.0.0.1 -p 10080 -C 64 -u www -f /usr/bin/php-cgi
启动php-cgi进程,监听127.0.0.1的10080端口,进程数为64(如果服务器内存小于3GB,可以只开启25个进程),用户为www:

参数含义如下:
-f <fcgiapp> 指定调用FastCGI的进程的执行程序位置,根据系统上所装的PHP的情况具体设置。
-a <addr> 绑定到地址addr。
-p <port> 绑定到端口port。
-s <path> 绑定到unix socket的路径path。
-C <childs> 指定产生的FastCGI的进程数,默认为5。(仅用于PHP)
-P <path> 指定产生的进程的PID文件路径。
-u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,CentOS下可以使用apache用户,其他的根据情况配置,如nobody、www-data等。

4. 将这行代码加入到/etc/rc.local文件底部,这样系统启动的时候就可以同时启动PHP的FastCGI进程?

安装nginx
安装 pcre
tar -xzf pcre-8.10.tar.gz
cd pcre-8.10
./configure?
?make && make install

wget?http://labs.frickle.com/files/ngx_cache_purge-1.0.tar.gz
tar zxvf ngx_cache_purge-1.0.tar.gz
tar -xzf nginx-0.8.49.tar.gz

cd nginx-0.8.49

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-openssl=/usr/lib???
--add-module=../ngx_cache_purge-1.0--add-module=/Users/mikewest/Repositories/nginx-static-etags (当nginx需要使用etags 进行页面缓
存的设置时就需要加载这个模块 然后在nginx。conf 添加这个参数
--add-module=../ngx_cache_purge-1.0 编译ngx_cache_purge-1.0.tar.gz时
location / {
...
FileETag on;
...
}

make && make install

编辑nginx.conf文件



user? www www;
worker_processes 50;
#worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
pid /var/run/nginx.pid;
# [ debug | info | notice | warn | error | crit ]
#error_log? /dev/null;
error_log? /var/www/logs/nginx_error.log error;
#error_log? logs/error.log? notice;
#error_log? logs/error.log? info;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 6553;

events{
?????? use epoll;

?????? #maxclient = worker_processes * worker_connections / cpu_number
?????? worker_connections 6553;
}
http{
?????? include?????? mime.types;
?????? default_type? application/octet-stream;
?????? charset? utf-8;

?????? log_format? main? '$remote_addr - $remote_user [$time_local] $request '
???????????????????????? '"$status" $body_bytes_sent "$http_referer" '
?????? #access_log? /dev/null;

?????? #General Options
?????? server_names_hash_bucket_size 128;
?????? client_header_buffer_size 32k;
?????? large_client_header_buffers 4 64k;

?????? ignore_invalid_headers?? on;
?????? recursive_error_pages??? on;
?????? server_name_in_redirect off;

?????? sendfile???????????????? on;

?????? #timeouts
?????? keepalive_timeout 60;

?????? #TCP Options
?????? tcp_nopush? on;
?????? tcp_nodelay on;

?????? #fastcgi options
?????? fastcgi_connect_timeout 300;
?????? fastcgi_send_timeout 300;
?????? fastcgi_read_timeout 300;
?????? fastcgi_temp_path /var/www/tmp/fastcgi_temp_path;
?????? fastcgi_cache_methods GET HEAD;
?????? fastcgi_cache_min_uses 3;
?????? #fastcgi_cache fastcgi_cache;
?????? fastcgi_cache_valid 200 302 20m;
?????? fastcgi_cache_valid 301 1h;
?????? fastcgi_cache_valid any 20m;
?????? fastcgi_cache_key 127.0.0.1:9000$request_uri;
?????? fastcgi_buffer_size 128k;
?????? fastcgi_buffers 4 128k;
?????? fastcgi_busy_buffers_size 128k;
?????? fastcgi_temp_file_write_size 128k;
?????? fastcgi_intercept_errors on;
?????? ###limit
????? limit_zone one $binary_remote_addr 10m;
????? limit_conn one 5;
???? #??? limit_req_zone $binary_remote_addr zone=one2:10m rate=5r/s;
???? #??? limit_req zone=one2 burst=5;
?????? #size limits
?????? client_max_body_size?????? 50m;
?????? client_body_buffer_size??? 256k;

?????? #gzip? compression
?????? gzip on;
?????? gzip_min_length? 0;
?????? gzip_buffers???? 16 8k;
?????? gzip_http_version 1.0;
?????? gzip_comp_level 9;
?????? gzip_types?????? text/plain text/css image/x-icon image/png;
?????? gzip_vary on;

?????? #temp files
?????? proxy_temp_path??????????? /var/www/tmp/proxy_temp_path;
#?????? fastcgi_temp_path?????????? /var/www/tmp/fastcgi_temp;
?????? client_body_temp_path?????? /var/www/tmp/client_body_temp;
?????? #client_body_temp_path? /usr/local/nginx8/client_body_temp 1 2;
?????? #proxy_temp_path??????? /usr/local/nginx8/proxy_temp 1 2;
?????? #fastcgi_temp_path????? /usr/local/nginx8/fastcgi_temp 1 2;
?????? #proxy 麓煤?铆禄潞麓忙?猫??
??????????? #proxy
?????????? proxy_buffering on;
????????? proxy_cache_min_uses 3;
????????? proxy_cache_path /var/www/tmp/proxy_cache_path levels=1:2 keys_zone=cache:500m inactive=30m max_size=10000M;
????????? proxy_cache_valid any 10m;
????????? proxy_cache_methods GET HEAD;
????????? proxy_cache_key "$host:$server_port$uri$is_args$args";
????????? proxy_ignore_client_abort off;
????????? proxy_intercept_errors on;
????????? proxy_next_upstream error timeout invalid_header;
????????? proxy_redirect off;
????????? proxy_set_header X-Forwarded-For $remote_addr;
????????? proxy_connect_timeout 60;
????????? proxy_send_timeout 60;
????????? proxy_read_timeout 60;
??????? #upstream ?枚录炉?潞???
??????? upstream? spawn? {
??????? # ip_hash;
???????? server?? 127.0.0.1:10080;
???????? #server?? 127.0.0.1:9002;
??????? # include???????? vhosts/tv.feiyang.com.conf;
????????? }


?????? # The following includes are specified for virtual hosts
????????? include???????? vhosts/tv.feiyang.com.conf;
}

编辑tv.feiyang.com.conf
server {
??? listen?????? 80;
??? server_name? tv.feiyang.com;
??? index index.html index.htm index.php;
??? root? /website/web001;
??? error_page 404 500 502 503 504 http://tv.feiyang.com;
??? ##servername chong ding xiang
? ? #? rewrite ^/(.*) http://192.168.188.133/$1 last;
??? #???? rewrite ^/(.*) /test.php last;
??? location / {


???? proxy_next_upsteam http_502 http_504 error timeout invalid_header;
???? proxy_cache_use_stale error timeout invalid_header updating http_500???? http_502 http_503 http_504;
??????? proxy_ignore_headers Expires Cache-Control;
???????????? }
????location ~ .*\.(php|php5)?$
??? {
???
???? #? fastcgi_pass spawn;
?????? fastcgi_pass? 127.0.0.1:10080;
?????? include spawn_php5.conf;
?????? fastcgi_index? index.php;
????? }
?????? location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
??? {
??????? expires????? 3d;
??? }
??? log_format? wwwlogs? '$http_x_forwarded_for - $remote_addr - $remote_user [$time_local] "$request" '
?????????????? '$status $body_bytes_sent "$http_referer" '
?????????????? '"$http_user_agent" $http_x_forwarded_for';
??? access_log? /var/www/logs/access.feiyang.log? wwwlogs;
? }


编辑spawn_php5.conf?fastcgi_param? GATEWAY_INTERFACE? CGI/1.1;
fastcgi_param? SERVER_SOFTWARE??? nginx;
fastcgi_param? QUERY_STRING?????? $query_string;
fastcgi_param? REQUEST_METHOD???? $request_method;
fastcgi_param? CONTENT_TYPE?????? $content_type;
fastcgi_param? CONTENT_LENGTH???? $content_length;
fastcgi_param? SCRIPT_FILENAME??? $document_root$fastcgi_script_name;
fastcgi_param? SCRIPT_NAME??????? $fastcgi_script_name;
fastcgi_param? REQUEST_URI??????? $request_uri;
fastcgi_param? DOCUMENT_URI?????? $document_uri;
fastcgi_param? DOCUMENT_ROOT????? $document_root;
fastcgi_param? SERVER_PROTOCOL??? $server_protocol;
fastcgi_param? REMOTE_ADDR??????? $remote_addr;
fastcgi_param? REMOTE_PORT??????? $remote_port;
fastcgi_param? SERVER_ADDR??????? $server_addr;
fastcgi_param? SERVER_PORT??????? $server_port;
fastcgi_param? SERVER_NAME??????? $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
#fastcgi_param? REDIRECT_STATUS??? 200;


5、启动Nginx

ulimit -SHn 51200
/usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/conf/nginx.conf


  四、配置开机自动启动Nginx + PHP

vi /etc/rc.local
  在末尾增加以下内容:


引用
ulimit -SHn 51200
/usr/local/webserver/php/bin/spawn-fcgi -a 127.0.0.1 -p 10080 -C 64 -u www -f /usr/local/webserver/php/bin/php-cgi
/usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/conf/nginx.conf


  五、优化Linux内核参数

vi /etc/sysctl.conf
  在末尾增加以下内容:


引用
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000????65000

  使配置立即生效:

/sbin/sysctl -p


  六、在不停止Nginx服务的情况下平滑变更Nginx配置
  (1)、修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:

/usr/local/webserver/nginx/sbin/nginx -t
  如果屏幕显示以下两行信息,说明配置文件正确:
  the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
  the configuration file /usr/local/webserver/nginx/conf/nginx.conf was tested successfully

  (2)、这时,输入以下命令查看Nginx主进程号:

ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'
  屏幕显示的即为Nginx主进程号,例如:
  6302
  这时,执行以下命令即可使修改过的Nginx配置文件生效:


kill -HUP 6302

?

读书人网 >操作系统

热点推荐