系统环境:Redhat 5.8 x86_32
软件环境:
    nginx-1.2.2.tar.gz
    mysql-5.5.24-linux2.6-i686.tar.gz
    php-5.4.4.tar.bz2
    xcache-2.0.0.tar.gz
    其他依赖软件包


一、安装nginx:

1、解决依赖关系

配置好yum源,编译安装nginx需要的安装开发库"Development Libraries"和开发工具包"Development Tools",同时还需要专门安装pcre-devel包:
# yum groulist //查看已安装的软件包组
# yum groupinstall "Development Libraries"  //安装开发库
# yum install pcre-devel

2、创建ngxin系统用户,以之运行nginx服务进程:

# useradd -r -s /bin/false -M nginx

3、编译安装

# tar xf nginx-1.2.2.tar.gz -C /usr/src
# cd /usr/src/nginx-1.2.2
# ./configure \
  --prefix=/usr \
  --sbin-path=/usr/sbin/nginx \
  --conf-path=/etc/nginx/nginx.conf \
  --error-log-path=/var/log/nginx/error.log \
  --http-log-path=/var/log/nginx/access.log \
  --pid-path=/var/run/nginx/nginx.pid  \
  --lock-path=/var/lock/nginx.lock \
  --user=nginx \
  --group=nginx \
  --with-http_ssl_module \
  --with-http_flv_module \
  --with-http_stub_status_module \
  --with-http_gzip_static_module \
  --http-client-body-temp-path=/var/tmp/nginx/client/ \
  --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
  --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
  --http-scgi-temp-path=/var/tmp/nginx/scgi \
  --with-pcre
# make && make install

说明:nginx的perl模块可通过在configure脚本添加--with-http_perl_module选项来实现,但目前此模块仍处于实验性阶段,可能在运行中会出现意外,故不在这里介绍。

3、为nginx提供sysv风格脚本:

# vim /etc/rc.d/init.d/nginx //添加内容如下:

--------------------------脚本内容从这里开始------------------------------------
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15 
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
 
nginx="/usr/sbin/nginx"
prog=$(basename $nginx)
 
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
 
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
 
lockfile=/var/lock/subsys/nginx
 
make_dirs() {
   # make required directories
   user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   options=`$nginx -V 2>&1 | grep 'configure arguments:'`
   for opt in $options; do
       if [ `echo $opt | grep '.*-temp-path'` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}
 
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
 
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
 
restart() {
    configtest || return $?
    stop
    sleep 1
    start
}
 
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
 
force_reload() {
    restart
}
 
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
 
rh_status() {
    status $prog
}
 
rh_status_q() {
    rh_status >/dev/null 2>&1
}
 
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac
-------------------------脚本内容到这里结束-------------------------------------

# chmod +x /etc/rc.d/init.d/nginx   //为脚本添加执行权限
# chkconfig --add nginx    //把nginx添加服务管理列表
# chkconfig nginx on //让其开机自启动
# service nginx start //启动服务测试

二、安装mysql:

1、准备存放mysql数据的地方

强烈建议数据存放在逻辑卷上,以方便以后的扩容和缩减等操作,关于如何创建逻辑卷可以看本人的另外一篇博客,这里不再给出过程,假设逻辑卷挂载在/mysql/data目录。

2、新建mysql用户以之运行mysql服务进程

# useradd -r -s /sbin/nologin -M mysql
# chown -R mysql:mysql /mysql/data

3、安装并初始化

# tar xf mysql-5.5.24-linux2.6-i686.tar.gz -C /usr/src/
# mv /usr/src/mysql-5.5.24-linux2.6-i686/ /usr/local/mysql
# chown -R root:mysql .
# scripts/mysql_install_db --user=mysql --datadir=/mysql/data

4、为mysql提供主配置文件

我这里是以32为系统内存512M演示的,mysql给的主配置文件样例有以下几个:
my-small.cnf //适合内存小于等于64M
my-medium.cnf //适合内存在32M与64M之间
my-large,cnf //适合内存等于512M
my-huge.cnf //适合内存在1G与2G之间
my-innodb-heavy-4G.cnf //适合内存等于4G
如过内存超过4G,不用考虑直接安装64位系统吧。

# cp support-files/my-large.cnf /etc/my.cnf

修改主配置文件中的thread_concurrency的值为CPU个数乘于2,由于我这里只有一个CPU所以修改如下:

# vim /etc/my.cnf
thread_concurrency = 2

并添加如下行指定数据文件存放位置:

datadir = /mysql/data

5、为mysql提供sysv风格服务脚本

# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

添加至服务管理列表并设置开机启动

# chkconfig --add mysqld
# chkconfig mysqld on
# service mysqld start

为了使mysql的安装符合系统使用规范,将其开发组建导出给系统使用,还需要一下几个步骤:

6、添加mysql的man手册至man命令查找路径

# vim /etc/man.conf //添加如下行
MANPATH /usr/local/myslq/man

7、添加mysql头文件至系统头文件搜索路径

# ln -s /usr/local/mysql/include /usr/include/mysql

8、输出mysql库文件至系统库查找路径

# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
# ldconfig  //让系统重新载入系统库

9、修改PATH变量,让系统可直接使用mysql相关命令

# vim /etc/profile  //添加如下行
PATH=$PATH:/usr/local/mysql/bin

三、安装php

1、解决依赖关系

如果想让php支持mcrypt、mhash、libevent,还需要安装如下依赖包:
libmcrypt、libmcrypt-devel、mcrypt
mhash、mhash-devel
libevent、libevent-devel

2、编译安装

# tar xf php-5.4.4.tar.bz2 -C /usr/src/
# cd /usr/src/php-5.4.4/
./configure \
--prefix=/usr/local/php \
--with-mysql=/usr/local/mysql \
--with-openssl \
--enable-fpm \
--enable-sockets \
--enable-sysvshm \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--enable-mbstring \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir \
--with-libxml-dir=/usr \
--enable-xml \
--with-mhash \
--with-mcrypt \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--with-bz2 \
--with-curl

# make && make install

3、为php提供配置文件

# cp php.ini-production /etc/php.ini

4、为php-fpm提供配置文件

# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

编辑配置文件相关选项为你所需要的值,并启用pid修改该行如下:

pid = /usr/local/php/var/run/php-fpm.pid

4、为php-fpm提供sysv风格服务脚本并添加至服务管理列表设置开启自启动

# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
# chmod +x /etc/rc.d/init.d/php-fpm
# chkconfig --add php-fpm
# chkconfig php-fpm on
# service php-fpm start

php-fpm默认监听127.0.0.1的9000端口

# netstat -anpt | grep php-fpm //测试是否启动成功

四、整合nginx和php

1、编译nginx主配置文件/etc/nginx/nginx.conf启动如下选项,并在主页面格式中添加php格式的主页面:

# vim /etc/nginx/nginx.conf
--------------------------启用的选项从这里开始----------------------------------
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }
---------------------------启用选项到这里结束----------------------------------
        location / {
            root   html;
            index  index.php index.html index.htm;
        }
---------------------------修改内容到这里结束----------------------------------

2、编辑/etc/nginx/fastcgi_params,清空原有内容添加如下内容:

# vim /etc/nginx/fastcgi_params
--------------------------添加内容从这里开始-----------------------------------
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;
----------------------------添加内容到这里结束----------------------------------

3、重新载入nginx配置文件并新建页面并测试php是否正常

# service nginx reload
# echo -e "<?php\nphpinfo();\n?>" >> /usr/html/index.html 
# mv /usr/html/index.html /usr/html/index.php

通过浏览器访问服务器对应的IP地址或域名测试打开的页面是否有php的信息。

五、安装xcache为php加速

1、安装xcache

# tar xf xcache-2.0.0.tar.bz2 -C /usr/src/
# cd /usr/src/xcache-2.0.0/
# /usr/local/php/bin/phpize
# ./configure \
--enable-xcache 
--with-php-config=/usr/local/php/bin/php-config
# make && make install

在安装结束时会出现如下行:

Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/

复制该路径后边要用到这个路径。

2、整合php和xcache

首先编辑将xcache提供配置样例复制到php配置文件搜索目录

# mkdir /etc/php.d
# cp xcache.ini /etc/php.d/

编辑/etc/php.d/xcache.ini文件修改如下行:

# vim /etc/php.d/xcache.ini
zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xcache.so

该路径即为安装xcache结束时出现的那个路径后加xcache.so即可
注意:如果有多条zend_extension,要确保此新增的行排在第一位。

3、重启php-fpm服务,测试xcache是否生效

# service php-fpm restart

刷新浏览器页面查看php信息中是否有如下图,如果有则证明已成功启用xcache:

说明:
    至此LNMP平台搭建完成,如果需要在https中使用php,需要在php的location中添加如下选项:
    fastcgi_param HTTPS on;