一、简介
Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,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
-一套nginx的路径前缀,即目录,将让服务器文件(默认值为prefix
/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
# 为两个虚拟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、phpMyAdmin、eAccelerator一键安装包。可以在VPS、独立主机上轻松的安装LNMP生产环境。
LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。
Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Mysql是一个小型关系型数据库管理系统。
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。
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
原文地址:http://bella41981.blog.51cto.com/10603572/1843351