首页 > 代码库 > Nginx网站服务

Nginx网站服务

一、简介

Nginx ("engine x") 是一个高性能的HTTP反向代理服务器,也是一个IMAP/POP3/SMTP服务器Nginx是由Igor Sysoev俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004104日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名201161日,nginx 1.0.4发布。

Nginx是一款轻量级Web 服务器/反向代理服务器及电子邮件IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东新浪网易腾讯淘宝等。在高并发连接的情况下,Nginx是Apache服务器不错的替代品品。Nginx同时也可以作为7层负载均衡服务器来使用。Nginx 0.8.46 + PHP 5.2.14(FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍。

    本节将依次介绍Nginx的安装和运行操作,配置文件nginx.conf,以及使用Nginx构建基于域名的虚拟WEB主机。

    其官方网站是:http://nginx.org/

 

二、系统环境

系统平台:CentOS6.5(系统要求Linux 2.6+内核)

Nginx版本:1.6.0

Mysql版本:5.5.22

Php版本:5.3.28

 

三、安装准备

1、获取相关源程序并安装

pcre-devel zlib-devel gcc gcc-c++ make ncurses-devel unzip

 

2、RPM包搜索网站

http://rpm.pbone.net/
http://www.rpmfind.net/

http://code.google.com/p/zed-lnmp/

 

3、软件包准备

cmake-2.8.6.tar.gz  官网:https://cmake.org/

libiconv-1.14.tar.gz  官网:http://www.gnu.org/software/libiconv/

mysql-5.5.22.tar.gz   官网:https://www.mysql.com/

nginx-1.6.0.tar.gz   官网:https://www.nginx.com/ 下载址:http://nginx.org/download/

php-5.3.28.tar.gz   官网:https://secure.php.net/

SKYUC.v3.4.2.SOURCE.zip   官网:www.skyuc.com

ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz  官网:http://www.zend.com/


将需要的软件上传到/root/下

四、安装及运行控制

1、编译安装Nginx


1)安装支持软件

  Nginx的运行需要Pcre、  Zlib等软件包的支持,因此应预先安装这些软件包的开发包(devel),一遍提供相应的库和头文件,确保Nginx的安装顺利完成(需要事先配置好yum,配置YUM)

[root@localhost ~]# yum -y install pcre-devel zlib-devel gcc gcc-c++ make

    

2)创建运行用户、组 

    Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,一遍更准确地控制其访问权限,增加灵活性,降低安全风险。例如,建立一个名为nginx的用户,不建立宿主文件夹,也禁用登录到shell环境,这样安全性就会提高一大截。

    

[root@localhost ~]# useradd -M -s /sbin/nologin nginx

3)编译安装nginx

 配置Nginx的编译选项时,将安装目录设为/usr/local/nginx,运行用户和组均设为nginx;启用http_stub_status_module模块以支持状态统计,便于查看服务器的连接信息。具体选项根据实际需要来定,配置前可参考“/configue --help”给出的说明。

    

[root@localhost ~]# tar zxf nginx-1.6.0.tar.gz

#将Nginx软件包解压缩到当前目录--with-http_s

[root@localhost ~]# cd nginx-1.6.0 

[root@localhost nginx-1.6.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install

--prefix=PATH    #指定安装路径

--user=USER     #启动程序的用户

--group=GROUP    #启动程序的组

--with-http_stub_status_module    #监控状态

[root@localhost nginx-1.6.0]# ls /usr/local/nginx/

conf  html  logs  sbin

#编译并安装Nginx服务

[root@localhost ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

#创建软链接

[root@localhost ~]# ll /usr/local/sbin/

总用量 0

lrwxrwxrwx. 1 root root 27 8月  25 00:57 nginx -> /usr/local/nginx/sbin/nginx

    

4)Nginx运行控制

nginx的支持以下命令行参数:

  • -?-h -为命令行参数打印帮助。

  • -c file -使用另一种结构file,而不是默认的文件。

  • -g directives -设置 全局配置指令,例如,

    nginx的-g“PID /var/run/nginx.pid; worker_processes‘的sysctl -n hw.ncpu`;”
  • -p prefix -一套nginx的路径前缀,即目录,将让服务器文件(默认值为/usr/local/nginx)。

  • -q - 配置测试过程中抑制非错误消息。

  • -s signal -发送信号 给主进程。参数信号可以是以下之一:

    • stop - 迅速关闭

    • quit - 正常关闭

    • reload - 重装配置,开始一个新的配置新的工作过程中,正常关闭旧的工作进程。

    • reopen - 重新打开日志文件

  • -t - 测试配置文件:nginx的检查语法是否正确配置,然后尝试打开在配置文件中提及。

  • -T -一样-t,但另外转储配置文件到标准输出(1.9.2)。

  • -v - 印刷nginx的版本。

  • -V - 印刷版nginx的,编译器版本和配置参数。

[root@localhost nginx-1.6.0]# nginx        ←开启Nginx服务

[root@localhost nginx-1.6.0]# nginx -t        ←检查Nginx配置文件是否存在错误

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

# 检查配置文件,我们从以上信息可以看出配置文件没有问题

    

[root@localhost ~]# killall -s HUP nginx    ←平滑重启 Nginx(我们可以编写一个脚本让其变成大家易懂的service nginx reload)等同于“killall -l nginx”

[root@localhost ~]# killall -s QUIT nginx    ←正常停止Nginx(service nginx stop)等同于“kill -3 nginx”

[root@localhost ~]# killall -s USR1 nginx    ←用于nginx的日志切换,也就是重新打开一个日志文件,例如每天要生成一个日志文件时,可以使用这个信号来控制。

[root@localhost ~]# killall -s USR2 nginx        ←用于平滑升级可执行程序。

    

5)编译脚本文件

  为了使Nginx服务的启动、停止、重载等操作变的更加方便,可以编写Nginx服务脚本,并使用chkconfig和service工具进行管理,可更加符合CentOS系统的操作习惯。

[root@localhost ~]# vim /etc/init.d/nginx  

#!/bin/bash

# chkconfig: 2345 99 20

# description: Nginx ServerControl Scripts shell

PROG="/usr/local/nginx/sbin/nginx"

PIDF="/usr/local/nginx/logs/nginx.pid"

ase "$1" in

 start)

  if [ -f $PIDF ]; then

     echo "Nginx is running.. Start it is error"

  else

     $PROG

  fi

  ;;

  stop)

  if [ -f $PIDF ]; then

     kill -s QUIT $(cat $PIDF)

     rm -rf $PIDF

  else

     echo "Nginx is stopping .. Stop it is error"

  fi

  ;;

  restart)

     $0 stop

     $0 start

  ;;

  reload)

  if [ -f $PIDF ]; then

     kill -s HUP $(cat $PIDF)

  else

     echo "Nginx is stopping . reload it is error"

  fi

  ;;

  status)

  if [ -f $PIDF ]; then

     echo "Nginx is running"

  else

     echo "Nginx is stopping"

  fi

  ;;

  *)

  echo "Usage: $0 (start|stop|restart|reload|status)"

  exit 1

esac

exit 0

    

   这样一来,就可以通过Nginx脚本来启动、停止、重启、重载Nginx服务了,方法是执行时添加相应的start、stop、restart、reload参数


[root@localhost nginx-1.6.0]# chmod +x /etc/init.d/nginx 

# 将该配置文件添加可执行权限

[root@localhost nginx-1.6.0]# chkconfig --add nginx

#将nginx添加为系统服务

[root@localhost nginx-1.6.0]# chkconfig --list nginx 

nginx          0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭

# 查看服务Nginx服务在什么状态系统

[root@localhost nginx-1.6.0]# service nginx status

Nginx is running

[root@localhost nginx-1.6.0]# service nginx stop


[root@localhost nginx-1.6.0]# service nginx status

Nginx is stopping

[root@localhost nginx-1.6.0]# service nginx start

[root@localhost nginx-1.6.0]# service nginx status

Nginx is running

[root@localhost nginx-1.6.0]# service nginx restart

[root@localhost nginx-1.6.0]# service nginx status

Nginx is running


#通过测试我们可以看出编写了服务脚本之后我们可以可以使用service命令启动服务了,这样更人性化一点。

五、Nginx的配置文件nginx.conf

    在Nginx服务器的主配置文件/usr/local/nginx/conf/nginx.conf中,包括全局配置、I/O事件配置和HTTP配置这三大块内容,配置语句的格式为“关键字 值;”(末尾以分号表示结束),以“#”开始的部分表示注释。

1)全局配置

  由各种配置语句组成,不是用特定的界定标记,全局配置部分包括Nginx服务的运行用户、工作进程数、错误日志、PID存放位置等基本设置。

user  nginx nginx;       

# 定义Nginx运行的用户和用户组(笔者这里创建的用户名是nginx组名是nginx) 

worker_processes  1;

# nginx进程数,建议设置为等于CPU总核心数。

#error_log  logs/error.log;

error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

# 全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]

pid        logs/nginx.pid;

# 进程文件


2)I/O事件配置

events {

# 工作模式与连接数上限

    use epoll;

参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。

    worker_connections  1024;

# #单个进程最大连接数(最大连接数=连接数*进程数)

}


3)HTTP配置


http {

    include       mime.types;    ←#文件扩展名与文件类型映射表

    default_type  application/octet-stream;    ←#默认文件类型

                      ‘$status $body_bytes_sent "$http_referer" ‘

                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    access_log  logs/access.log  main;

    sendfile        on;    ←#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。       

    #tcp_nopush     on;    ←#防止网络阻塞

    #keepalive_timeout  0;    

    keepalive_timeout  65;    ←#长连接超时时间,单位是秒

    #gzip  on;    ←#开启gzip压缩输出

    server {    ←#虚拟主机的配置

        listen       80;      ←#监听端口 

        server_name  www.linux.com;     ←#域名;域名可以有多个,用空格隔开

       charset utf-8;    ←#默认编码

        access_log  logs/host.access.log  main;    ←#定义本虚拟主机的访问日志

        location / {        ←根目录配置

            root   html;    ←网站根目录的位置

            index  index.html index.htm;    ←默认首页(索引页)

        stub_status on;        ←#stub_status on主要用于查看Nginx的一些状态信息.

        access_log off;        ←#关闭此位置的日志记录

        }

        #error_page  404              /404.html;   ←#404错误页面 


        # redirect server error pages to the static page /50x.html    ←

        #

        error_page   500 502 503 504  /50x.html;    ←#内部错误的反馈页面

        location = /50x.html {            ←#错误页面配置

            root   /var/www/html/linux;

        }


        # proxy the PHP scripts to Apache listening on 127.0.0.1:80

        #

        #location ~ \.php$ {

        #    proxy_pass   http://127.0.0.1;

        #}


        #

        #location ~ \.php$ {

        #    root           html;

        #    fastcgi_pass   127.0.0.1:9000;

        #    fastcgi_index  index.php;


        # deny access to .htaccess files, if Apache‘s document root

        # concurs with nginx‘s one

        #

        #location ~ /\.ht {

        #    deny  all;

        #}

    #

    #server {

    #    listen       8000;

    #    listen       somename:8080;

    #    server_name  somename  alias  another.alias;


    #    location / {

    #        root   html;

    #        index  index.html index.htm;

    #    }

    #}



    # HTTPS server

    #

    #server {

    #    listen       443 ssl;

    #    server_name  localhost;


    #    ssl_certificate      cert.pem;

    #    ssl_certificate_key  cert.key;


    #    ssl_session_cache    shared:SSL:1m;

    #    ssl_session_timeout  5m;


    #    ssl_ciphers  HIGH:!aNULL:!MD5;

    #    ssl_prefer_server_ciphers  on;


    #    location / {

    #        root   html;

    #        index  index.html index.htm;

    #    }

    #}


}


[root@localhost conf]# service nginx restart


# 由于笔者在虚拟环境是搭建的实验,没有搭建DNS服务器,所以需要将客户机中C:\Windows\System32\drivers\etc\hosts添加如下行(笔者的CentOS操作系统的IP是192.168.25.5)

“192.168.25.5www.linux.com”不需要双引号!添加好了之后系统就会安装hosts中的信息进行域名解析,下面我们就来测试下


技术分享

#在浏览器中访问Nginx服务器/status网络位置,可以看到当前的状态统计信息,如上图。其中“Active connections”表示当前的活动链接数(1);而“Server accepts handled requests”表示已经处理的连接信息,三个数字一次表示已经处理的连接数(6)、成功的TCP握手次数(6)、已经处理的请求数(12)。


五、基于域名的虚拟Web主机


1)准备网站目录及测试文件

    使用Nginx搭建虚拟主机服务时,每个虚拟Web站点拥有独立的“Server { }”配置段、各自监听的IP地址、端口号可以单独指定,当然网站名称也是不同的。下面我们就来配置一下!

[root@localhost conf]# mkdir -pv /var/www/html/{linux,nginx}

mkdir: 已创建目录 "/var/www"

mkdir: 已创建目录 "/var/www/html"

mkdir: 已创建目录 "/var/www/html/linux"

mkdir: 已创建目录 "/var/www/html/nginx"

[root@localhost conf]# echo "www.linux.com" > /var/www/html/linux/index.html

[root@localhost conf]# echo "www.nginx.com" > /var/www/html/nginx/index.html

[root@localhost conf]# cat /var/www/html/linux/index.html 

www.linux.com

[root@localhost conf]# cat /var/www/html/nginx/index.html 


www.nginx.com

# 为两个虚拟web主机分别建立根目录,并准备测试首页,以方便在测试时区分。


2)调整nginx.conf配置文件

[root@localhost conf]# vim /usr/local/nginx/conf/nginx.conf

user  nginx nginx;

worker_processes  1;

#error_log  logs/error.log;

error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

pid        logs/nginx.pid;

events {

    use epoll;

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

                      ‘$status $body_bytes_sent "$http_referer" ‘

                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    access_log  logs/access.log  main;

    sendfile        on;

    #tcp_nopush     on;

    #keepalive_timeout  0;

    keepalive_timeout  65;

    #gzip  on;

    server {            

        listen       80;

        server_name  www.linux.com;

        access_log  logs/host.access.log  main;

        location / {

            root   /var/www/html/linux;

            index  index.html index.htm;

        stub_status on;

        access_log off;

        }

        #error_page  404              /404.html;


        # redirect server error pages to the static page /50x.html

        #

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   /var/www/html/linux;

        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80

        #

        #location ~ \.php$ {

        #    proxy_pass   http://127.0.0.1;

        #}

        #

        #location ~ \.php$ {

        #    root           html;

        #    fastcgi_pass   127.0.0.1:9000;

        #    fastcgi_index  index.php;

        # deny access to .htaccess files, if Apache‘s document root

        # concurs with nginx‘s one

        #

        #location ~ /\.ht {

        #    deny  all;

        #}

    }

    server {

        listen       80;

        server_name  www.nginx.com;

        charset utf-8;

        access_log  logs/host.access.log  main;

        location / {

            root   /var/www/html/nginx;

            index  index.html index.htm;

        }

        location ~ /status {

        stub_status on;

        access_log off;

}

}

    #

    #server {

    #    listen       8000;

    #    listen       somename:8080;

    #    server_name  somename  alias  another.alias;

    #    location / {

    #        root   html;

    #        index  index.html index.htm;

    #    }

    #}

    # HTTPS server

    #

    #server {

    #    listen       443 ssl;

    #    server_name  localhost;

    #    ssl_certificate      cert.pem;

    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;

    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;

    #    ssl_prefer_server_ciphers  on;

    #    location / {

    #        root   html;

    #        index  index.html index.htm;

    #    }

    #}

}

[root@localhost conf]# nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[root@localhost conf]# service nginx restart

    配置两个“server { }”区域,分别对应两个web站点,指定各自的网站名称、监听地址、网站根目录、访问日志等信息,然后重载配置


3)访问虚拟web主机

    在浏览器中分别访问两个站点:www.linux.com和www.nginx.com,若能看到各自的测试首页内容就表示虚拟web主机的配置成功了。

    注意:如果没有DNS的用户一定要修改C:\Windows\System32\drivers\etc\hosts

    

技术分享

    

技术分享

 

    

   

技术分享

   

  经过我们的测试可以看出搭建虚拟Web主机成功了!!!


六、LNMP架构及应用部署

 1、架设LNMP网站平台 

  LNMP是一个基于CentOS/Debian编写的Nginx、PHP、MySQL、phpMyAdmineAccelerator一键安装包。可以在VPS、独立主机上轻松的安装LNMP生产环境。

LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。

Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debiancentosubuntufedoragentoo等。

Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。

Mysql是一个小型关系型数据库管理系统

PHP是一种在服务器端执行的嵌入HTML文档的脚本语言

这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。


1)安装MySQL数据库

为了与Nginx、PHP环境保持一致,仍选择采用源码编译的方式安装MySQL组件。

[root@localhost ~]# vim mysqld.sh

#!/bin/bash

#the scripts install mysql


#query the mysql rpm

rpm -q mysql-server &>/dev/null && rpm -e mysql-server --nodeps

rpm -q mysql &>/dev/null && rpm -e mysql --nodeps

rpm -q ncurses-devel &> /dev/null || yum -y install ncurses-devel


#install cmake

tar zxf /root/cmake-2.8.6.tar.gz -C /usr/src

cd /usr/src/cmake-2.8.6

./configure &> /dev/null

gmake &> /dev/null

gmake install &> /dev/null

which cmake

if [ $? -eq 0 ] ; then

echo "cmake insalled"

else 

echo "cmake not installed please install cmake"

exit 1

fi


#install mysql

groupadd mysql

useradd -M -s /sbin/nologin  -g mysql mysql

tar zxf /root/mysql-5.5.22.tar.gz -C /usr/src/

cd /usr/src/mysql-5.5.22/

cmake  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql   -DSYSCONFDIR=/etc  -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci  -DWITH_EXTRA_CHARSETS=all &>/dev/null

make &>/dev/null

make install &>/dev/null

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

/bin/cp -f  support-files/my-medium.cnf /etc/my.cnf

/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/data &> /dev/null

echo "PATH=$PATH:/usr/local/mysql/bin"  >> /etc/profile

. /etc/profile

/bin/cp -f  support-files/mysql.server   /etc/init.d/mysqld

chmod +x /etc/init.d/mysqld 

chkconfig --add mysqld

service mysqld start 

  编写了一个MySQL脚本,这样大家安装的时候就会更容易,(切记!一定要将需要的源码包提前放到/root下,否则脚本会找不到源码包而导致失败)

[root@localhost ~]# chmod +x mysqld.sh 

[root@localhost ~]# ./mysqld.sh 

# 给刚刚编写的脚本一个执行权限,然后执行。


[root@localhost ~]# mysqladmin -uroot password "123456"

# 为MySQL中root用户设置密码


2)安装PHP解析环境

  较新版本的PHP已经自带FPM(FatsCGI Process Manager ,FastCGI进程管理器)模块,用来对PHP解析示例进行管理,优化解析效率,单服务器的LNMP架构通常使用这种方式,因此在配置PHP编译选项时应添加“--enabled-fpm”以启用此模块。

  本次实验使用的是源码包php-5.3.28.tar.gz,具体安装过程如下所述,为了提高PHP解析的效率,建议将相应版本的ZendGuardLoader也安装上。

[root@localhost ~]# yum -y install gd libxml2 libxml2-devel libjpeg-devel libpng-devel

# 安装下面需要的相关程序

[root@localhost ~]# tar xf php-5.3.28.tar.gz 

[root@localhost ~]# cd php-5.3.28

[root@localhost php-5.3.28]# ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib && make && make install

# 编译安装过程中如果报错请查阅Php编译安装常见错误



[root@localhost php-5.3.28]# cp php.ini-development /usr/local/php5/php.ini

[root@localhost php-5.3.28]# ln -s /usr/local/php5/bin/* /usr/local/bin/

[root@localhost php-5.3.28]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/

[root@localhost php-5.3.28]# ll /usr/local/bin/

总用量 34440

-rwxr-xr-x. 1 root root  8240514 8月  25 03:01 ccmake

-rwxr-xr-x. 1 root root  8124602 8月  25 03:01 cmake

-rwxr-xr-x. 1 root root  8710940 8月  25 03:01 cpack

-rwxr-xr-x. 1 root root 10099608 8月  25 03:01 ctest

-rwxr-xr-x. 1 root root    82257 8月  25 21:51 iconv

lrwxrwxrwx. 1 root root       24 8月  25 21:58 pear -> /usr/local/php5/bin/pear

lrwxrwxrwx. 1 root root       27 8月  25 21:58 peardev -> /usr/local/php5/bin/peardev

lrwxrwxrwx. 1 root root       24 8月  25 21:58 pecl -> /usr/local/php5/bin/pecl

lrwxrwxrwx. 1 root root       24 8月  25 21:58 phar -> /usr/local/php5/bin/phar

lrwxrwxrwx. 1 root root       29 8月  25 21:58 phar.phar -> /usr/local/php5/bin/phar.phar

lrwxrwxrwx. 1 root root       23 8月  25 21:58 php -> /usr/local/php5/bin/php

lrwxrwxrwx. 1 root root       30 8月  25 21:58 php-config -> /usr/local/php5/bin/php-config

lrwxrwxrwx. 1 root root       26 8月  25 21:58 phpize -> /usr/local/php5/bin/phpize

[root@localhost php-5.3.28]# ll /usr/local/sbin/

总用量 0

lrwxrwxrwx. 1 root root 27 8月  25 00:57 nginx -> /usr/local/nginx/sbin/nginx

lrwxrwxrwx. 1 root root 28 8月  25 21:58 php-fpm -> /usr/local/php5/sbin/php-fpm

[root@localhost php-5.3.28]#cd 

[root@localhost ~]# tar zxvf ZendGuardLoader-php-5.3-linux-glibc23-x86_64

ZendGuardLoader-php-5.3-linux-glibc23-x86_64/

ZendGuardLoader-php-5.3-linux-glibc23-x86_64/php-5.3.x/

ZendGuardLoader-php-5.3-linux-glibc23-x86_64/php-5.3.x/ZendGuardLoader.so

ZendGuardLoader-php-5.3-linux-glibc23-x86_64/README.txt

[root@localhost ~]# cd ZendGuardLoader-php-5.3-linux-glibc23-x86_64/php-5

[root@localhost php-5.3.x]# cp ZendGuardLoader.so /usr/local/php5/lib/php

[root@localhost php-5.3.x]# vim /usr/local/php5/php.ini zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so

zend_loader.enable=1

#这两行添加到/usr/local/php5/php.ini的最后


3)配置Nginx支持PHP环境

  若要让Nginx能够解析PHP网页,有两种方法可以选择:其一,充当中介,将访问PHP页面的web请求转借给其他服务器(LAMP)去处理;其二,通过使用PHP的FPM模块来调用本机的PHP环境。

3.1)启动php-fpm进程

    如果选用FPM方式,则需要先启动php-fpm进程,以便监听PHP解析请求。参考范例建立php-fpm.conf配置文件,并修改其中的PID文件、运行用户、服务数(进程数)等相关设置,然后启动php-fpm程序即可(默认监听本机的9000端口)

[root@localhost php-5.3.x]# cd /usr/local/php5/etc/

[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf

[root@localhost etc]# vim php-fpm.conf

25 pid = run/php-fpm.pid   //确认pid文件位置

140 user = nginx           //程序用户

141 group =nginx                //程序组

217 pm.max_children = 50  //最多空闲进程数

 

222 pm.start_servers= 20     //启动时开启的进程数

227 pm.min_spare_servers =5      //最小空闲进程数

232 pm.max_spare_servers =35     //最大空闲进程数


[root@localhost etc]# /usr/local/sbin/php-fpm 

[root@localhost etc]# netstat -anpt | grep php-fpm

tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      81037/php-fpm       

# 启动php-fpm进程


  在php-fpm.conf文件中,pid配置行指出了PID信息的存放位置,对应的实际路径为/usr/local/php5/var/run/php-fpm.pid.根据上述信息,可以修改Nginx服务脚本,以便在启动/停止Nginx服务室将php-fpm进程也自动启动/停止。


[root@localhost etc]# vim /etc/init.d/nginx

#!/bin/bash

#chkconfig: 2345 99 20

#description: Nginx Server Control Script

PROG="/usr/local/nginx/sbin/nginx"

PIDF="/usr/local/nginx/logs/nginx.pid"

PROG_FPM="/usr/local/sbin/php-fpm"

PIDF_FPM="/usr/local/php5/var/run/php-fpm.pid"

case "$1"in

        start)

        $PROG

        $PROG_FPM

        ;;

        stop)

        kill -s QUIT $(cat $PIDF)

        kill -s QUIT $(cat $PIDF_FPM)

        ;;

        restart)

        $0 stop

        $0 start

        ;;

        reload)

        kill -s HUP $(cat $PIDF)

        ;;

        *)

        echo "Usage: $0(start|stop|restart|reload)"

        exit 1

esac

exit 0

# 我们将控制php-fpm的命令添加到了该脚本中,这样php-fpm就可以和Nginx一同启停!我们可以直接用这个脚本将以前的脚本覆盖掉


3.2)配置Nginx支持PHP解析

  无论是将PHP页面交给LAMP服务器去解析,还是调用本机的php-fpm进程进行解析,都需要在“server { }”配置段中添加location设置,以便指定当访问.php网页时采取任何中操作。

  对于第一种方法(转交给其他web服务器处理),使用的配置语句如下所示。例如,交给ip地址为192.168.5.253的LAMP服务器处理,从而实现由Nginx负责静态页面,LAMP负责动态页面的分离效果。


server {            

 ......部分内容省略......

    location ~ \.php$ {        ←访问.php页面的配置段

            proxy_pass   http://192.168.4.253:80;     ←Apache服务器的监听端口

        }

}

......部分内容省略......

  对于第二种方法(调用本机的php-fpm进程),使用的配置语句如下所示。在conf/目录下的fastcgi.conf文件中已经包含必须的宏设置,可用过include语句来添加进来。

server {

......部分内容省略......  

        location ~ \.php$ {        ←访问.php页面的配置段

            root       /var/www/html/linux;    ←php网页文档根目录

            fastcgi_pass   127.0.0.1:9000;    ←php-fpm的监听地址

            fastcgi_index  index.php;    ←PHP首页文件

            include        fastcgi.conf;    ←包括gastcgi.conf样本配置

        }

}  

......部分内容省略......


3.3)PHP页面访问测试

  以调用php-fpm解析为例,可以在PHP文档根目录下创建一个测试网页,以便测试PHP语句能否正常解析,以及能否访问Mysql数据库。


[root@localhost etc]# vim /var/www/html/linux/test.php

<?php

$link=mysql_connect(‘localhost‘,‘root‘,‘123456‘);

if($link) echo "<h1>successful</h1>";

mysql_close();

?>

#将以上内容复制倒php的测试文件中

  访问http://www.linux.com/test.php 若能看到成功连接的提示信息如图1-5,则表示PHP解析及数据连接均正常;否则应数据页面提示、日志消息等进行检查,排除相应的故障。


技术分享

七、在LNMP平台部署web应用

1)下载并部署程序代码

  本次实验中我们使用天空电影系统(简称SKYUC)是一套PHP视频点播系统(电影程序),支持各种P2P流媒体软件,适合电影门户站、多媒体中心、网吧、酒店、教育等多种行业使用,其官方网站为http://www,skyuc.com/。


 将下载好的SKUUC程序文件解压,找到其中的wwwroot文件并将其放置到LNMP服务器的网站根目录,然后适当调整权限(若此处不调整,也可参考安装页面的提示再调整),以允许nginx、php-fpm程序拥有必要的写入权限。

[root@localhost etc]# yum -y install unzip

# unzip为zip压缩文件的解压缩程序。


[root@localhost etc]# cd 

[root@localhost ~]# unzip SKYUC.v3.4.2.SOURCE.zip 

# 解压SKYUC的.zip包

[root@localhost ~]# cd SKYUC.v3.4.2.SOURCE

[root@localhost SKYUC.v3.4.2.SOURCE]# mv wwwroot /var/www/html/linux/skuyc

# 将SKYUC目录中的wwwroot移动到/var/www/html/linux/skyuc(将wwwroot移动到LNMP服务器的根目录下命名为skyuc)

[root@localhost SKYUC.v3.4.2.SOURCE]# cd /var/www/html/linux/skyuc

[root@localhost skyuc]# chown -R nginx:nginx admincp/ data/ templates/ upload/

# 更改权限


2)创建数据库

[root@localhost skyuc]# mysql -u root -p

Enter password: 

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.5.22-log Source distribution

ved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

ement.

mysql> CREATE DATABASE skyucdb;

Query OK, 1 row affected (0.00 sec)

c123‘;

Query OK, 0 rows affected (0.00 sec)

mysql> exit


3)安装Web应用

以上部署好之后访问http://www.linux.com/skyuc/install/index.php,将会打开SKYUC的安装程序,根据页面提示,只需三步即可轻松完成,如图1-6所示

技术分享

   确保系统环境、目录权限、缓存可写性等检测通过,否则安装将无法继续。在第三步配置系统步骤中,除了应正确配置数据库连接(类型不要误选为MySQLi)外,还应该设置好管理账号、密码等基本信息。

技术分享

   完成安装以后可以删除install目录,以降低风险。

[root@localhost ~]# cd /var/www/html/linux/skyuc/

[root@localhost skyuc]# mv install/ install.lock

# 将install文件更改一个名字不用删除也会很安全

技术分享

4)访问Web应用系统

  完成安装以后,通过访问http://www.linux.com/skyuc,可以看到“天空网络”电影系统站点首页,如图1.7所示;通过访问http://www.benet.com/skyuc/admincp/并以管理员账号登录后可进入后台,如图1.8所示

        

技术分享


技术分享


技术分享



  本次实验中所需要的软件会以链接的形式提供给大家,如需要最新版请去个软件挂网下载,若本人提供软件无法使用请自行寻找。

                                  本文中部分内容来自网络



本文出自 “linux” 博客,请务必保留此出处http://bella41981.blog.51cto.com/10603572/1843351

Nginx网站服务