Nginx+php+mysql+xcache安装配置

2019年1月10日14:02:34 发表评论 2,301 ℃

一、安装Nginx:

1、解决依赖关系

编译安装nginx需要事先需要安装开发包组"Development Tools"和 "Development Libraries"。同时,还需要专门安装pcre-devel包:

# yum -y install pcre-devel

2、安装

首先添加用户nginx,实现以之运行nginx服务进程:

# groupadd -r nginx

# useradd -r -g nginx nginx

接着开始编译和安装:

# ./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选项来实现,但目前此模块仍处于实验性使用阶段,可能会在运行中出现意外,因此,其实现方式这里不再介绍。如果想使用基于nginx的cgi功能,也可以基于FCGI来实现,具体实现方法请参照网上的文档。

3、为nginx提供SysV init脚本:

新建文件/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' -`

  opti -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

# chkconfig nginx on

而后就可以启动服务并测试了:

# service nginx start

二、安装mysql-5.5.28

1、准备数据存放的文件系统

新建一个逻辑卷,并将其挂载至特定目录即可。这里不再给出过程。

这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录。

2、新建用户以安全方式运行进程:

# groupadd -r mysql

# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql

# chown -R mysql:mysql /mydata/data

3、安装并初始化mysql-5.5.28

首先下载平台对应的mysql版本至本地,这里是32位平台,因此,选择的为mysql-5.5.28-linux2.6-i686.tar.gz,其下载位置为ftp://172.16.0.1/pub/Sources/mysql-5.5。

# tar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local

# cd /usr/local/

# ln -sv mysql-5.5.24-linux2.6-i686 mysql

# cd mysql 

# chown -R mysql:mysql .

# scripts/mysql_install_db --user=mysql --datadir=/mydata/data

# chown -R root .

4、为mysql提供主配置文件:

# cd /usr/local/mysql

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

并修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行:

thread_c 2

另外还需要添加如下行指定mysql数据文件的存放位置:

datadir = /mydata/data

5、为mysql提供sysv服务脚本:

# cd /usr/local/mysql

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

添加至服务列表:

# chkconfig --add mysqld

# chkconfig mysqld on

而后就可以启动服务测试使用了。

为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:

6、输出mysql的man手册至man命令的查找路径:

编辑/etc/man.config,添加如下行即可:

MANPATH /usr/local/mysql/man

7、输出mysql的头文件至系统头文件路径/usr/include:

这可以通过简单的创建链接实现:

# ln -sv /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的相关命令。具体实现过程这里不再给出。

三、编译安装php-5.4.4

1、解决依赖关系:

请配置好yum源(可以是本地系统光盘)后执行如下命令:

# yum -y groupinstall "X Software Development" 

如果想让编译的php支持mcrypt、mhash扩展和libevent,此处还需要下载ftp://172.16.0.1/pub/Sources/ngnix目录中的如下几个rpm包并安装之:

libmcrypt-2.5.8-4.el5.centos.i386.rpm

libmcrypt-devel-2.5.8-4.el5.centos.i386.rpm

mhash-0.9.9-1.el5.centos.i386.rpm

mhash-devel-0.9.9-1.el5.centos.i386.rpm

mcrypt-2.6.8-1.el5.i386.rpm

最好使用升级的方式安装上面的rpm包,命令格式如下:

# rpm -Uvh 

另外,也可以根据需要安装libevent,系统一般会自带libevent,但版本有些低。因此可以升级安装之,它包含如下两个rpm包。

libevent-2.0.17-2.i386.rpm

libevent-devel-2.0.17-2.i386.rpm

说明:libevent是一个异步事件通知库文件,其API提供了在某文件描述上发生某事件时或其超时时执行回调函数的机制,它主要用来替换事件驱动的网络服务器上的event loop机制。目前来说, libevent支持/dev/poll、kqueue、select、poll、epoll及Solaris的event ports。

2、编译安装php-5.4.4

首先下载源码包至本地目录,下载位置ftp://172.16.0.1/pub/Sources/new_lamp。

# tar xf php-5.4.4.tar.bz2

# cd 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 

说明:如果前面第1步解决依赖关系时安装mcrypt相关的两个rpm包,此./configure命令还可以带上--with-mcrypt选项以让php支持mycrpt扩展。--with-snmp选项则用于实现php的SNMP扩展,但此功能要求提前安装net-snmp相关软件包。

# make

# make test

# make intall

为php提供配置文件:

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

为php-fpm提供Sysv init脚本,并将其添加至服务列表:

# 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

为php-fpm提供配置文件:

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

编辑php-fpm的配置文件:

# vim /usr/local/php/etc/php-fpm.conf

配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):

pm.max_children = 150

pm.start_servers = 8

pm.min_spare_servers = 5

pm.max_spare_servers = 10

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

接下来就可以启动php-fpm了:

# service php-fpm start

使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):

# ps aux | grep php-fpm

四、整合nginx和php5

1、编辑/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;

    }

2、编辑/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;

并在所支持的主页面格式中添加php格式的主页,类似如下:

location / {

      root html;

      index index.php index.html index.htm;

    }

     

而后重新载入nginx的配置文件:

# service nginx reload

3、在/usr/html新建index.php的测试页面,测试php是否能正常工作:

# cat > /usr/html/index.php << EOF

<?php

phpinfo();

?>

接着就可以通过浏览器访问此测试页面了。

五、安装xcache,为php加速:

1、安装

# tar xf xcache-2.0.0.tar.gz

# cd xcache-2.0.0

# /usr/local/php/bin/phpize

# ./configure --enable-xcache --with-php-c># make && make install

安装结束时,会出现类似如下行:

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

2、编辑php.ini,整合php和xcache:

首先将xcache提供的样例配置导入php.ini

# mkdir /etc/php.d

# cp xcache.ini /etc/php.d

说明:xcache.ini文件在xcache的源码目录中。

接下来编辑/etc/php.d/xcache.ini,找到zend_extension开头的行,修改为如下行:

zend_extensi /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so

注意:如果php.ini文件中有多条zend_extension指令行,要确保此新增的行排在第一位。

3、重新启动php-fpm

# service php-fpm restart

六、补充说明

如果要在SSL中使用php,需要在php的location中添加此选项:

fastcgi_param HTTPS on;

补充阅读材料:

Events is one of paradigms to achieve asynchronous execution. But not all asynchronous systems use events. That is about semantic meaning of these two - one is super-entity of another.

epoll and aio use different metaphors:

epoll is a blocking operation (epoll_wait()) - you block the thread until some event happens and then you dispatch the event to different procedures/functions/branches in your code.

In AIO you pass address of you callback function (completion routine) to the system and the system calls your function when something happens.

Problem with AIO is that your callback function code runs from system thread and so on top of system stack. A few problems with that as you can imagine.

【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: