阅读(2888) (0)

20.2.2 配置Nginx服务

2019-05-17 11:09:19 更新

Nginx是一款相当优秀的用于部署动态网站的轻量级服务程序,它最初是为俄罗斯门户站点而开发的,因其稳定性、功能丰富、占用内存少且并发能力强而备受用户的信赖。目前国内诸如新浪、网易、腾讯等门户站点均已使用了此服务。

Nginx服务程序的稳定性源自于采用了分阶段的资源分配技术,降低了CPU与内存的占用率,所以使用Nginx程序部署的动态网站环境不仅十分稳定、高效,而且消耗的系统资源也很少。此外,Nginx具备的模块数量与Apache具备的模块数量几乎相同,而且现在已经完全支持proxy、rewrite、mod_fcgi、ssl、vhosts等常用模块。更重要的是,Nginx还支持热部署技术,可以7×24不间断提供服务,还可以在不暂停服务的情况下直接对Nginx服务程序进行升级。

图20-2 Nginx与Apache著名LOGO

坦白来讲,虽然Nginx程序的代码质量非常高,代码很规范,技术成熟,模块扩展也很容易,但依然存在不少问题,比如是由俄罗斯人开发的,所以在资料文档方面还并不完善,中文资料的质量更是鱼龙混杂。但是Nginx服务程序在近年来增长势头迅猛,相信会在轻量级Web服务器市场具有不错的未来。

在正式安装Nginx服务程序之前,我们还需要为其解决相关的软件依赖关系,例如用于提供Perl语言兼容的正则表达式库的软件包pcre,就是Nginx服务程序用于实现伪静态功能必不可少的依赖包。下面来解压、编译、生成、安装Nginx服务程序的源码文件:

    [root@linuxprobe ~]# cd /usr/local/src
    [root@linuxprobe src]# tar xzvf pcre-8.35.tar.gz 
    [root@linuxprobe src]# cd pcre-8.35
    [root@linuxprobe pcre-8.35]# ./configure --prefix=/usr/local/pcre
    [root@linuxprobe pcre-8.35]# make
    [root@linuxprobe pcre-8.35]# make install 

openssl软件包是用于提供网站加密证书服务的程序文件,在安装该程序时需要自定义服务程序的安装目录,以便于稍后调用它们的时候更可控。

    [root@linuxprobe pcre-8.35]# cd /usr/local/src
    [root@linuxprobe src]# tar xzvf openssl-1.0.1h.tar.gz
    [root@linuxprobe src]# cd openssl-1.0.1h
    [root@linuxprobe openssl-1.0.1h]# ./config --prefix=/usr/local/openssl
    [root@linuxprobe openssl-1.0.1h]# make
    [root@linuxprobe openssl-1.0.1h]# make install 

openssl软件包安装后默认会在/usr/local/openssl/bin目录中提供很多的可用命令,我们需要像前面的操作那样,将这个目录添加到PATH环境变量中,并写入到配置文件中,最后执行source命令以便让新的PATH环境变量内容可以立即生效:

    [root@linuxprobe pcre-8.35]# vim /etc/profile
    ………………省略部分输出信息………………
     64 
     65 for i in /etc/profile.d/*.sh ; do
     66 if [ -r "$i" ]; then
     67 if [ "${-#*i}" != "$-" ]; then
     68 . "$i"
     69 else
     70 . "$i" >/dev/null
     71 fi
     72 fi
     73 done
     74 export PATH=$PATH:/usr/local/mysql/bin:/usr/local/openssl/bin
     75 unset i
     76 unset -f pathmunge
    [root@linuxprobe pcre-8.35]# source /etc/profile

zlib软件包是用于提供压缩功能的函数库文件。其实Nginx服务程序调用的这些服务程序无需深入了解,只要大致了解其作用就已经足够了:

    [root@linuxprobe pcre-8.35]# cd /usr/local/src
    [root@linuxprobe src]# tar xzvf zlib-1.2.8.tar.gz 
    [root@linuxprobe src]# cd zlib-1.2.8
    [root@linuxprobe zlib-1.2.8]# ./configure --prefix=/usr/local/zlib
    [root@linuxprobe zlib-1.2.8]# make
    [root@linuxprobe zlib-1.2.8]# make install

在安装部署好具有依赖关系的软件包之后,创建一个用于执行Nginx服务程序的账户。账户名称可以自定义,但一定别忘记,因为在后续需要调用:

    [root@linuxprobe zlib-1.2.8]# cd ..
    [root@linuxprobe src]# useradd www -s /sbin/nologin

在使用命令编译Nginx服务程序时,需要设置特别多的参数,其中,--prefix参数用于定义服务程序稍后安装到的位置,--user与--group参数用于指定执行Nginx服务程序的用户名和用户组。在使用参数调用openssl、zlib、pcre软件包时,请写出软件源码包的解压路径,而不是程序的安装路径:

    [root@linuxprobe src]# tar xzvf nginx-1.6.0.tar.gz 
    [root@linuxprobe src]# cd nginx-1.6.0/
    [root@linuxprobe nginx-1.6.0]# ./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-openssl=/usr/local/src/openssl-1.0.1h --with-zlib=/usr/local/src/zlib-1.2.8 --with-pcre=/usr/local/src/pcre-8.35
    [root@linuxprobe nginx-1.6.0]# make
    [root@linuxprobe nginx-1.6.0]# make install

要想启动Nginx服务程序以及将其加入到开机启动项中,也需要有脚本文件。可惜的是,在安装完Nginx软件包之后默认并没有为用户提供脚本文件,因此刘遄老师给各位读者准备了一份可用的启动脚本文件,大家只需在/etc/rc.d/init.d目录中创建脚本文件并直接复制下面的脚本内容即可(相信各位读者在掌握了第4章的内容之后,应该可以顺利看懂这个脚本文件)。

    [root@linuxprobe nginx-1.6.0]# vim /etc/rc.d/init.d/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: /usr/local/nginx/conf/nginx.conf
    # pidfile: /usr/local/nginx/logs/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' -`
            if [ -z "`grep $user /etc/passwd`" ]; then
                    useradd -M -s /bin/nologin $user
            fi
    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

保存脚本文件后记得为其赋予755权限,以便能够执行这个脚本。然后以绝对路径的方式执行这个脚本,通过restart参数重启Nginx服务程序,最后再使用chkconfig命令将Nginx服务程序添加至开机启动项中。大功告成!

    [root@linuxprobe nginx-1.6.0]# chmod 755 /etc/rc.d/init.d/nginx
    [root@linuxprobe nginx-1.6.0]# /etc/rc.d/init.d/nginx restart
    Restarting nginx (via systemctl):                          [  OK  ]
    [root@linuxprobe nginx-1.6.0]# chkconfig nginx on

Nginx服务程序在启动后就可以在浏览器中输入服务器的IP地址来查看到默认网页了。相较于Apache服务程序的红色默认页面,Nginx服务程序的默认页面显得更加简洁,如图20-2所示。

图20-3 Nginx服务程序的默认页面