首页 > 代码库 > NGINX由入门到精通:编译安装nginx

NGINX由入门到精通:编译安装nginx

一、环境准备
1、系统和内内核版本

[root@linux-node1 ~]# cat /etc/redhat-release
CentOS release 6.8 (Final)
[root@linux-node1 ~]# uname -r
2.6.32-642.el6.x86_64

2、主机名称和IP地址

[root@linux-node1 ~]# hostname 
linux-node1.ourplm.com
[root@linux-node1 ~]# hostname -I
192.168.56.11

3、关闭防火墙和SELINUX

[root@linux-node1 ~]# getenforce 
Disabled
[root@linux-node1 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.

4、使用阿里yum源

[root@linux-node1 ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[root@linux-node1 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
[root@linux-node1 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
[root@linux-node1 ~]# yum repolist
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
repo id          repo name                                                              status
base             CentOS-6 - Base - mirrors.aliyun.com                                    6,696
epel             Extra Packages for Enterprise Linux 6 - x86_64                         12,355
extras           CentOS-6 - Extras - mirrors.aliyun.com                                     64
updates          CentOS-6 - Updates - mirrors.aliyun.com                                   959
repolist: 20,074

二、nginx安装
1、必要软件准备
(1)安装 pcre,是为了支持rewrite功能,如果你已经装了,请跳过这一步

[root@linux-node1 ~]# yum install -y pcre pcre-devel

(2)安装openssl,是为了ssl的支持,如果不需要 ssl 支持,请跳过这一步

[root@linux-node1 ~]# yum install -y openssl openssl-devel

2、安装nginx
(1)创建软件包存放目录

[root@linux-node1 ~]# mkdir -p /server/tools

(2)下载nginx源码包

[root@linux-node1 ~]# cd /server/tools
[root@linux-node1 tools]# wget -q http://nginx.org/download/nginx-1.8.1.tar.gz
[root@linux-node1 tools]# ll
total 816
-rw-r--r-- 1 root root 833473 Jan 27  2016 nginx-1.8.1.tar.gz

(3)解压nginx源码包

[root@linux-node1 tools]# tar xf nginx-1.8.1.tar.gz 
[root@linux-node1 tools]# ll
total 820
drwxr-xr-x 8 1001 1001   4096 Jan 26  2016 nginx-1.8.1
-rw-r--r-- 1 root root 833473 Jan 27  2016 nginx-1.8.1.tar.gz

(4)创建nginx用户

[root@linux-node1 nginx-1.8.1]# useradd -rs /sbin/nologin nginx
[root@linux-node1 nginx-1.8.1]# id nginx
uid=498(nginx) gid=498(nginx) groups=498(nginx)

(5)编译安装

[root@linux-node1 tools]# cd nginx-1.8.1
[root@linux-node1 tools]# ./configure --prefix=/usr/local/nginx-1.8.1 --user=nginx --group=nginx --with-http_ssl_module --with-http_spdy_module --with-http_stub_status_module --with-pcre

参数解释:
--user=nginx              :指定程序运行时的用户
--group=nginx           :指定程序运行时的用户组
--prefix=/usr/local/nginx-1.8.1 :安装路径
– with-http_stub_status_module  :支持 nginx 状态查询,可以用来监控nginx
– with-http_ssl_module     :支持https
– with-http_spdy_module :支持google的 spdy, 想了解请百度 spdy, 这个必须有 ssl 的支持
– with-pcre             :为了支持 rewrite 重写功能,必须制定 pcre
提示:出现如下的内容,表明nginx configure完成
……………省略内容……………
Configuration summary
  + using system PCRE library
  + using system OpenSSL library
  + md5: using OpenSSL library
  + sha1: using OpenSSL library
  + using system zlib library

  nginx path prefix: "/usr/local/nginx-1.8.1"
  nginx binary file: "/usr/local/nginx-1.8.1/sbin/nginx"
  nginx configuration prefix: "/usr/local/nginx-1.8.1/conf"
  nginx configuration file: "/usr/local/nginx-1.8.1/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx-1.8.1/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx-1.8.1/logs/error.log"
  nginx http access log file: "/usr/local/nginx-1.8.1/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

[root@linux-node1 nginx-1.8.1]# make && make install

……………省略内容……………
make[1]: Leaving directory `/server/tools/nginx-1.8.1‘
提示:出现上面的内容,表示nginx安装完成
(6)去除nginx目录版本号

[root@linux-node1 ~]# ln -s /usr/local/nginx-1.8.1/ /usr/local/nginx
[root@linux-node1 ~]# ll -d  /usr/local/nginx*
lrwxrwxrwx 1 root root   23 Mar 13 20:01 /usr/local/nginx -> /usr/local/nginx-1.8.1/
drwxr-xr-x 6 root root 4096 Mar 13 19:56 /usr/local/nginx-1.8.1

3、启动、关闭和重新加载配置文件
(1)查看nginx命令帮助

[root@linux-node1 ~]# /usr/local/nginx/sbin/nginx -h
nginx version: nginx/1.8.1
Usage: nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /usr/local/nginx-1.8.1/)
  -c filename   : set configuration file (default: conf/nginx.conf)
  -g directives : set global directives out of configuration file

参数翻译:

参数
含义
-?,-h帮助
-v查看nginx版本
-V
查看nginx版本以及编译安装参数
-t
检查nginx配置文件语法
-q在配置测试期间禁止非错误消息
-s signal指定nginx服务停止、退出、重启和重新加载
-p prefix指定nginx配置文件nginx.conf目录
-c filename
指定nginx配置文件
-g directives设置配置文件中全局指令

(2)启动nginx

[root@linux-node1 ~]# /usr/local/nginx/sbin/nginx 
[root@linux-node1 ~]# netstat -nlutp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      4098/nginx          
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1428/sshd           
tcp        0      0 :::22                       :::*                        LISTEN      1428/sshd  
[root@linux-node1 ~]# curl -s http://localhost | grep nginx.com
<a href="http://nginx.com/">nginx.com</a>.</p>

(3)关闭nginx

[root@linux-node1 ~]# /usr/local/nginx/sbin/nginx -s stop
[root@linux-node1 ~]# netstat -nlutp                     
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1428/sshd           
tcp        0      0 :::22                       :::*                        LISTEN      1428/sshd  
[root@linux-node1 ~]# curl -s http://localhost | grep nginx.com

(4)加载配置文件

[root@linux-node1 ~]# /usr/local/nginx/sbin/nginx -s reload
/usr/local/nginx-1.5.1/sbin/nginx

(5)nginx启动脚本

[root@linux-node1 ~]# cat /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:      /usr/local/nginx/conf/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=http://www.mamicode.com/`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
[root@linux-node1 ~]# chmod +x /etc/init.d/nginx
[root@linux-node1 ~]# /etc/init.d/nginx 
Usage: /etc/init.d/nginx {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}

到这来nginx就算是安装完成啦O(∩_∩)O哈哈~

本文出自 “炫维” 博客,请务必保留此出处http://xuanwei.blog.51cto.com/11489734/1905865

NGINX由入门到精通:编译安装nginx