系统环境:CentOS6.6
软件环境:Nginx :1.8.1 官方网站http://www.nginx.org
编译安装Nginx,yum安装mysql、php
1、安装Nginx
1)安装支持软件:
Nginx需要pcre、zlib等的支持,预先安装这些软件的开发包(devel),以便提供相应的库和头文件。
yum install pcre-devel zlib-devel
2)创建运行用户、组:
默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限,增加灵活性、降低安全风险。如:创建nginx用户,不建立宿主目录,也禁止登录shell环境。
useradd -M -s /sbin/nologin nginx
3)编译安装nginx:
wget http://nginx.org/download/nginx-1.8.1.tar.gz
tar zxvf nginx-1.8.1.tar.gz
cd nginx-1.8.1
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install
注:配置前可以参考:./configure –help给出说明
–with-http_stub_status_module:启用http_stub_status_module模块以支持状态统计
至此Nginx安装完成,为了使Nginx运行更加方便,可以创建链接文件。
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
4)Nginx的运行控制:
与apache的主程序httpd类似,Nginx的主程序也提供了”-t”选项用来对配置文件进行检查,以便找出不当或错误的配置。配置文件nginx.conf默认位于安装目录下的conf/子目录中。若要检查位于其他位置的配置文件,可使用”-c”选项来指定路径。
- 配置检查
[root@localhost ~]# 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
- 平滑重启Nginx
nginx -s reload #Nginx 0.8.x之后的版本
kill -HUP nginx进程号 #Nginx 0.8.x之前的版本
- 启动、停止Nginx:
直接运行nginx即可启动Nginx服务器,这种方式将使用默认的配置文件,若要改用其他配置文件,需添加”-c 配置文件路径”选项来指定路径。
当Nginx进程运行时,PID号默认存放在logs/目录下的nginx.pid文件中,因此若改用kill命令,也可以根据nginx.pid文件中的PID号来进行控制。
[root@localhost ~]# nginx #启动nginx
[root@localhost ~]# killall -9 nginx #停止nginx
2、PHP解析环境
配置Nginx支持PHP环境:
若要让Nginx能够解析PHP网页,有两种方法可以选择;
其一,充当中介,将访问PHP页面的WEB请求转交给其他服务器(LAMP)去处理;
其二,通过使用PHP的FPM模块来调用本机的PHP环境
如果选用FPM方式,则需要先启动php-fpm进程,以便监听PHP解析请求。参考范例建立php-fpm.conf配置文件,并修改其中的PID文件、运行用户、服务数(进程数量)等相关设置,然后启动php-fpm程序即可(默认监听本机的9000端口)
安装mysql、php,php安装php-fpm,php-mysql模块
yum install mysql mysql-server mysql-devel php php-fpm php-mysql
- 修改相关参数
//确认pid文件位置
[root@localhost ~]# grep pid /etc/php-fpm.conf
pid = /var/run/php-fpm/php-fpm.pid
//运行用户和运行组
[root@localhost ~]# vim /etc/php-fpm.d/www.conf
user = nginx
group = nginx
//启动时开启的进程数、最少空闲进程数、最多空闲进程数
[root@localhost ~]# vim /etc/php-fpm.d/www.conf
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
- 启动php-fpm、mysql并查看地址监听
[root@localhost ~]# service mysqld start
[root@localhost ~]# php-fpm &
[root@localhost ~]# netstat -anpl |grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 5897/php-fpm
unix 3 [ ] STREAM CONNECTED 23065 5897/php-fpm
unix 3 [ ] STREAM CONNECTED 23064 5897/php-fpm
- 配置mysql、php-fpm开机启动
chkconfig mysqld on
chkconfig php-fpm on
3、配置Nginx支持PHP解析:
无论是将PHP页面交给LAMP服务器去解析,还是调用本机的php-fpm进程进行解析,都需要在”server{}”配置段中添加location设置,以便指定当访问.php面页时采取何种操作。
- 对于第一种方法(转交给其他WEB服务器处理),使用的配置语句如下所示,例如,交给IP地址为192.168.0.200的LAMP服务器处理,从而实现由Nginx负责静态页面,LAMP负责动态页面的分离效果。
server {
…… //省略部分信息
location ~ \.php$ { //访问.php页面的配置段
proxy_pass http://192.168.0.200:80; //APACHE服务器的监听地址
}
}
- 对于第二种方法(调用本机的php-fpm进程),使用的配置语句如下所示。在nginx的 conf目录下的fastcgi.conf文件中已经包含必需的宏设置,可通过include语句添加进来。
server {
…… //省略部分信息
location ~ \.php$ { #访问php页面的配置段
root /var/www/benet; #PHP网页文档根目录
fastcgi_pass 127.0.0.1:9000; #php-fpm的监听地址
fastcgi_index index.php; #PHP首页文件
include fastcgi.conf; #包括fastcgi.conf样本配置
}
}
例如:
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 88;
server_name localhost:88;
charset utf-8;
access_log logs/benet.access.log;
location / {
root html;
index index.php;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
}
完成修改后重新加载nginx服务即可生效。
- PHP页面访问测试:
在PHP文档根目录下创建一个测试网页,以便测试PHP语名能否正常解析,以及能否访问MYSQL数据库。测试页内容如下 :
vim test.php
<?php
$link=mysql_connect('localhost','root','');
if($link) echo "success!!!";
mysql_close();
?>
然后访测试页如:http://IP/test.php若能看到成功提示信息表示一切正常
为了使Nginx服务的启动、停止、重载等操作更加方便,可以编写Nginx服务脚本,并使用chkconfig和service工具来进行管理,也更加符合RHEL系统的管理习惯。
vim /etc/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/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/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
添加为系统服务:
chmod +x /etc/init.d/nginx
chkconfig --add nginx
Nginx的location
基本语法:
location [=|~|~*|^~] /uri/ { … }
= 表示做精确匹配
~ :为区分大小写匹配
~*: 为不区分大小写匹配
!~ :和 !~* 分别为区分大小写不匹配及不区分大小写不匹配
正则表达式匹配,其中:
文件及目录匹配,其中:
-f 和 !-f 用来判断是否存在文件
-d 和 !-d 用来判断是否存在目录
-e 和 !-e 用来判断是否存在文件或目录
-x 和 !-x 用来判断文件是否可执行
示例1:
location = / {
# 只匹配 / 查询。
}
location / {
#匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配
}
示例2:
location ^~ /images/ {
# 匹配任何以 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
}
示例3:
location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何以 gif、jpg 或 jpeg 结尾的请求。
}
转载请务必保留此出处:http://blog.youkuaiyun.com/fgf00/article/details/51027391