Nginx的简介        

        Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler(俄文:Рамблер)使用。 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.目前中国大陆使用nginx网站用户有:新浪、网易、 腾讯,另外知名的微网志Plurk也使用nginx。

学习nginx的必要性(http://news.netcraft.com/)

据w3techs网站调查结果显示,Nginx的市场份额已经从今年年初的5.9%增长到了10%,成为增长最快的Web服务器。目前Apache仍占主导地位。

clip_image001

这个来自俄罗斯的Web服务器(Nginx)俨然已经成为了该领域的一匹黑马,目前每天新增的一百万网站中有超过100个网站使用Nginx。Nginx获得的这些市场份额来自于其他Web服务器,其中大部分是从Apache转过来的。

据统计,流量高的网站更喜欢使用Nginx,前1000个顶级网站中,有23.9%的网站使用的是Nginx。这包括许多广为人知的网站,如Wordpress.com、Tumblr.com、Sourceforge.net、Archive.org和Dropbox.com等。

clip_image003

在俄罗斯,Nginx拥有55.2%的市场份额,在一些国家,Nginx甚至成为了首选服务器。但是只有1%的美国政府网站使用Nginx。

来看看典型Nginx网站背后使用的技术。这些网站主要使用PHP作为服务器端语言,约占94.7%此外,在使用Ruby或JavaScript(服务器端)的网站中,Nginx也占据了比较高的份额。尽管Nginx也能在Windows操作系统中很好地运行,但约99.1%的Nginx网站运行在类UNIX操作系统上。

clip_image004

另外,80.6%的Nginx网站使用HTTP压缩,而Apache和微软IIS网站的这一数据分别为40.2%和28%。

 

 

一:在internet网上下载各个源码的包,在此我使用以下的源码程序

操作系统的版本 red hat 企业版 5 2.6.18-164.el5

版本号:nginx-1.0.11.tar.gz官方网站 http://nginx.org/en/download.html

版本号:mysql-5.0.81.tar.gz 源码包

官方网站 www.msql.com 社区版和服务器版

版本号:php-5.3.7.tar 官方网站 www.php.net

二:必要的编译环境

Development Libraries 开发的库文件

Development Tools  开发的工具

Legacy Software Development 传统的开发工具

X Software Development 图形化的软件开发工具

GNOME Software Development gnome桌面下的软件开发工具

KDE Software Development kde桌面下的软件开发工具

说明:若没有的话需要使用yum来进行安装, yum groupinstall 包名称

 

具体步骤

一:

1:安装pcre-devel 的开发环境使得nginx支持地址重写

[root@zzu ~]# cd /mnt/cdrom/Server/

[root@zzu Server]# rmp -ivh pcre-devel-6.6-2.el5_1.7.i386.rpm

2:上传各个源码包到linux的/root目录

clip_image006

3:安装nginx 的源码包

groupadd -r nginx 增加nginx的组

useradd -r -g nginx -s /bin/false -M nginx 增加nginx的用户

[root@zzu ~]# tar -zxvf nginx-1.0.11.tar.gz -C /usr/local/src/ 解压源码到相应的文件

[root@zzu src]# ll

total 12

drwxrwxrwx 39 7155 wheel 4096 Feb 7 23:54 mysql-5.0.81

drwxr-xr-x 9 1001 1001 4096 Feb 7 23:10 nginx-1.0.11

drwxr-xr-x 16 1000 1000 4096 Feb 8 02:29 php-5.3.7

[root@zzu src]# cd nginx-1.0.11/

[root@zzu nginx-1.0.11]#./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/ \

--with-pcre

[root@zzu nginx-1.0.11]# make 编译

[root@zzu nginx-1.0.11]# make install  安装

编写Nginx 的控制脚本,实现对nginx的方便管理

#!/bin/bash

#

# 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

为此脚本赋予执行权限:

[root@zzu nginx-1.0.11]# chmod +x /etc/rc.d/init.d/nginx

[root@zzu nginx-1.0.11]# chkconfig --add nginx

[root@zzu nginx-1.0.11]# chkconfig nginx on

[root@zzu nginx-1.0.11]# service nginx start

测试:

clip_image008

4:安装mysql 的源码包

#useradd –M –s /sbin/nologin mysql 添加mysql用户,如果安装系统时候已经装过mysql会提示用户已存在,建议在安装前先卸载掉系统自带的mysql,卸载完成后必须重启,否则新装的mysql会无法启动,提示错误信息3306端口被占有

#tar zxvf mysql-5.0.81.tar.gz -C /usr/local/src

#cd /usr/local/src/mysql-5.0.81

#./configure --prefix=/usr/local/mysql

#make

#make install

安装完成。

配置mysql

#cd /usr/local/src/mysql-5.0.81

#cp support-files/my-medium.cnf /etc/my.cnf 复制主配置文件

#/usr/local/mysql/bin/mysql_install_db --user=mysql 初始化

#chown -R root:mysql /usr/local/mysql

#chown -R mysql /usr/local/mysql/var

#vim /etc/ld.so.conf.d/mysqld.conf 对库文件进行连接

/usr/local/mysql/lib 增加该行

#ln -s /usr/local/mysql/include /usr/include/mysql 对头文件进行连接

#/usr/local/mysql/bin/mysqld_safe --user=mysql & 后台安全启动 (如果显示启动并且卡住不动按回车)

#cd /usr/local/src/mysql-5.0.81

#cp support-files/mysql.server /etc/init.d/mysqld 复制启动脚本

#chmod +x /etc/init.d/mysqld 赋予脚本执行权限

#chkconfig --add mysqld 添加到系统自动启动服务中

#chkconfig mysqld on 默认启动mysql

#chkconfig --list mysqld 查看mysql在什么级别启动或者关闭

# vim /etc/profile

clip_image010

# echo $PATH    设置系统全局的环境变量PATH值,方便使用mysql数据库命令

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin

#Service mysqld start

4:安装php的源码包

[root@zzu ~]# tar jxvf php-5.3.7.tar.bz2 -C /usr/local/src/

[root@zzu ~]# cd /usr/local/src/

[root@zzu src]# cd php-5.3.7/

[root@zzu php-5.3.7]#./configure \

--prefix=/usr/local/php \

--with-mysql=/usr/local/mysql \

--with-openssl \

--enable-fpm \

--with-mysqli=/usr/local/mysql/bin/mysql_config \

--enable-mbstring \

--with-config-file-path=/etc/php \

--with-config-file-scan-dir=/etc/php \

--with-iconv=/usr/local

[root@zzu php-5.3.7]# make
[root@zzu php-5.3.7]# make install

为php提供配置文件:
[root@zzu php-5.3.7]# cp php.ini-production /etc/php/php.ini

为php-fpm提供Sysv init脚本,并将其添加至服务列表:
[root@zzu php-5.3.7]# cp sapi/fpm/init.d.php-fpm  /etc/rc.d/init.d/php-fpm
[root@zzu php-5.3.7]# chkconfig --add php-fpm
[root@zzu php-5.3.7]# chkconfig php-fpm on

为php-fpm提供配置文件:
[root@zzuphp-5.3.7]#cp/usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

编辑php-fpm的配置文件:
[root@zzu php-5.3.7]# vim /usr/local/php/etc/php-fpm.conf
配置pm.的相关选项为你所需要的值

pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
接下来就可以启动php-fpm了:
[root@zzu php-5.3.7]# service php-fpm start

Starting php-fpm done

二、整合nginx和php

1、 编辑/etc/nginx/nginx.conf,启用如下选项:

[root@zzu ~]# vim /etc/nginx/nginx.conf
clip_image012

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是否能正常工作:
<?php
phpinfo();
?>

测试与php的连接

clip_image014

测试与mysql的连接

clip_image016

clip_image018

总结:

到此为止一个简单的lnmp的环境就搭建成功啦!!!