手机版
你好,游客 登录 注册
背景:
阅读新闻

Nginx+PHP-FPM在两台服务器实现

[日期:2012-11-12] 来源:Linux社区  作者:huakai201 [字体: ]

笔者作此实验的时候,查阅过网络上的相关文档,好多人都是在同一台服务器上实现的,因此废了不少功夫,但是考虑到生产环境,就想分开实现,本文主要介绍Nginx+php-fpm在两台服务器实现,因为笔者做的时候,卡了很久,所以就想拿出来分享下,虽然没什么技术性,但是发现了自己对nginx结合fpm理解的疏漏,记下来,以此为鉴。

首先我们来介绍下Nginx是什么吧;

Nginx是由俄罗斯软件工程师Igor Sysoev开发的一个高性能的HTTP和反向代理服务器,具备IMAP/POP3和SMTP服务器功能。Nginx最大的特点是对高并发的支持和高效的负载均衡,在高并发的需求场景下,是Apache服务器不错的替代品。目前,包括新浪、腾讯等知名网站已经开始使用Nginx作为Web应用服务器。

Nginx VS Apache

Nginx主要是适用于高并发和高效的负载均衡,轻量级web 服务器,相比Apache,nginx的众多模块(最新的开发版本已经支持动态加载)不够完善,对脚本的支持力度不高。

Apache由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一,支持动态加载模块,但是不适合高并发的环境下。

Nginx的轻量级:采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。nginx官方表示保持10,000个没有活动的连接,它只占2.5M内存,所以类似DOS这样的攻击对nginx来说基本上是毫无用处的。

接着介绍下PHP-fpm是什么;

PHP-FPM是一个PHPFastCGI管理器,是只用于PHP的。

PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中,必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用

#huakai#:2011年,小米手机风靡大江南北,风骚了好久,但是让小米追求者不快的是,每次在抢购小米的时候,总是提示服务器繁忙,笔者参与多几次抢购活动,深受其害,不知道小米的网站采用的是什么服务器软件呢。

讲完这么多,你肯定马上想看看Nginx究竟为何物吧,那我废话不再说了,开始部署服务器吧!!!

1,准备开发库以及对文中所涉及软件的介绍。

1.1 :安装“Development Libraries”“Development Tools””X Software Development” 包组以及pcre-devel包(可以使用系统自带的yum源安装)

1.2 : 需要的软件

nginx-1.2.3.tar.gz

php-5.4.8.tar.gz

mysql-5.0.77-4.el5_6.6

mysql-server-5.0.77-4.el5_6.6

mysql-devel-5.0.77-4.el5_6.6

libmcrypt-2.5.7-5.el5.i386.rpm

mcrypt-2.6.8-1.el5.i386.rpm

mhash-devel-0.9.2-6.el5.i386.rpm

mhash-0.9.2-6.el5.i386.rpm

libmcrypt-devel-2.5.7-5.el5.i386.rpm(笔者采用rhel5.8系统,yum源为光盘,所有包组以及mysql均采用系统自带的rpm包,)

1.3 :关闭selinux

具体软件版本的依赖型,各位可以参照php或者nginx的官方网站,笔者就不在此班门弄斧了。

1.4: Nginx Server: IP 172.16.8.1

PHP-FPM Server:IP 172.16.8.2 ,同时安装了mysql(这里为了减轻笔者计算机负荷,就将mysql安装在此服务器)

 

2.配置Nginx服务器(以上开发库的安装方式不再给出过程)

 

2.1:编译安装

IP:172.16.8.1

#groupadd -r nginx

#useradd -g nginx -r nginx

#tar xf nginx-1.2.3.tar.gz

# cd nginx-1.2.3

#./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

2.2 为nginx提供SysV init脚本
#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

2.3 为此脚本赋予执行权限:

#chmod +x /etc/rc.d/init.d/nginx

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

# chkconfig --add nginx
# chkconfig nginx on

2.5启动服务测试:

#service nginx start

#huakai# 紫色字体为改动或添加,其他均为默认设置,此方法,全局生效!

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款