LEMP架构及应用部署

系统环境: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.csdn.net/fgf00/article/details/51027391

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值