编译安装nginx

等一个不爱你的人,就像在机场等一艘船

编译环境

在linux使用make方式安装,需要保证linux已经具备比较OK的编译环境,例如gcc等编译工具。一般而言,服务器提供商在安装的系统中已经默认集成了这些软件,但是为了保险起见,我们还是通过一些较为基础的方式,把这些依赖包都跑一遍,以防在之后的编译中出差错。

1
yum -y install gcc gcc-c++ autoconf automake libtool make cmake# yum -y install zlib zlib-devel openssl openssl-devel pcre-devel

创建用来运行nginx的用户及组

我们创建一个新的用户和用户组来运行nginx,这样可以把nginx和root分开,保证nginx不具备root权限。但是,我们并不希望nginx成为一个真实的可以登陆到远程进行操作的用户,所以,我们并不给它创建家目录,在useradd的时候,用-M参数:

1
2
groupadd nginx
useradd -g nginx -M nginx

-g参数为nginx用户指定了一个组
-M参数保证其不自动生成home目录

禁止用户登陆也很方便,只需要修改配置文件中有关用户和用户组的信息即可。

1
# vi /etc/passwd

找到nginx,将后面的/bin/bash改为/sbin/nologin即可。

编译安装Nginx

  • 下载

    1
    wget http://xxxxxxxxxx/nginx1.7.x.tar.gz# tar zxvf nginx1.7.x.tar.gz# cd nginx1.7.x
  • 配置

    1
    # ./configure --prefix=/usr/local/nginx \--pid-path=/usr/local/nginx/run/nginx.pid \--with-http_ssl_module \--user=nginx \ --group=nginx \--with-pcre \--without-mail_pop3_module \--without-mail_imap_module \--without-mail_smtp_module

    说明可以使用./configure --help查看一些配置信息

  • 编译

    1
    2
    make
    make install
  • 运行

    1
    2
    3
    cd /usr/local/nginx
    ls
    sbin/nginx

nginx服务的载入

make编译安装的软件,可不像yum安装的服务,我们熟悉的service命令并不起效,不然你用service nginx restart试试看。这是因为service调用/etc/ini.d/目录下的程序完成,而该目录下并不存在nginx这个程序。那么这个时候怎么重启nginx呢?如下操作:

1
/usr/local/nginx/sbin/nginx -s reload

这个操作可以重新加载nginx的配置文件,相当于重启。如果一定要重启整个服务,那只能通过杀死nginx进程,然后在运行程序了。

不过为了使用我们熟悉的service操作, 现在提供一个文件(nginx)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# this script create it by ivan at 2010.12.29.
#
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
# It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /etc/nginx.conf

nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/usr/local/nginx/run/nginx.pid

RETVAL=0
prog="nginx"

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0

# Start nginx daemons functions.
start(){

if [ -e $nginx_pid ]; then
echo "nginx already running..."
exit 1
fi
echo -n $"Starting $prog:"
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}

# Stop nginx daemons functions.
stop(){
echo -n $"Stopping $prog:"
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx $nginx_pid
}

#reload nginx service functions.
reload(){
echo -n $"Reloading $proc:"
killproc $nginxd -HUP
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac

exit $RETVAL

放到/etc/ini.d/目录下,并执行:

1
chmod +x /etc/init.d/nginx # chkconfig --add nginx# chkconfig nginx on

这样就可以通过service nginx restart等方法来操作nginx了。

https://www.tangshuang.net/1774.html