centos7下安装与配置nginx

Nginx(engine x) 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 服务器,与 Apache、lighttpd相比,nginx 占用内存少,稳定性高,它最常的用途是提供反向代理服务。

安装

yum 源不提供 nginx 的安装,可以通过切换 yum 源的方法获取安装,或者手动下载安装包,以下操作都需要root权限。

安装 nginx 前需要三个库(nginx 中 gzip 模块需要 zlib 库,rewrite 模块需要 pcre 库,ssl 功能需要 openssl 库),将目录切换到/usr/local。以下依赖库版本号可选择最新的。

安装 PCRE 库

1
2
3
4
5
6
7
cd /usr/local/
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gz
tar -zxvf pcre-8.41.tar.gz
cd pcre-8.41
./configure
make
make install

安装 zlib 库

1
2
3
4
5
6
7
cd /usr/local/ 
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make
make install

安装 ssl

1
2
3
4
5
6
cd /usr/local/
wget http://www.openssl.org/source/openssl-1.1.0g.tar.gz
tar -zxvf openssl-1.1.0g.tar.gz
./config
make
make install

安装 nginx

1
2
3
4
5
6
7
cd /usr/local/
wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar -zxvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --prefix=/usr/local/nginx
make
make install

注意:configure 后面可带编译参数,要将上面三个库编译到 nginx 模块中,并且让 nginx 支持 https,还需带这些参数(跟在上面的 prefix 后面就行,以空格隔开)

1
2
3
4
5
--with-http_stub_status_module
--with-http_ssl_module
--with-pcre=/usr/local/pcre-8.41
--with-zlib=/usr/local/zlib-1.2.11
--with-openssl=/usr/local/openssl-1.1.0g

安装完成后可输入/usr/local/nginx/sbin/nginx -V查看 configure 参数有哪些。这时候也可以通过输入/usr/local/nginx/sbin/nginx启动 nginx,浏览器输入虚拟机ip,如果出现nginx欢迎页则说明 nginx 安装并运行成功。这时也可以在centos里测试curl --head http://localhost,其它命令如下

1
2
3
4
/usr/local/nginx/sbin/nginx -s reload   #重启
/usr/local/nginx/sbin/nginx -s stop #停止
/usr/local/nginx/sbin/nginx -t #测试配置文件
/usr/local/nginx/sbin/nginx -v #打印版本号

Cautions:firewall 防火墙可能没有开放80端口和 http 服务,从而导致浏览器不能访问 web。可用命令查看防火墙允许的端口和服务(不加--permanent参数的话重启防火墙之后就会失效)

1
2
firewall-cmd --permanent --list-services
firewall-cmd --permanent --list-ports

如果没有上面所说的端口和服务,那就输入下面的命令:

1
2
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-port=80/tcp

加入系统服务

创建 nginx 启动命令脚本

1
vi /etc/init.d/nginx

粘贴以下内容, 注意修改 PATH 和 NAME 字段, 匹配自己的安装路径

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
#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# 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: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/var/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 /var/run/nginx.pid
}
# reload nginx service functions.
reload() {
echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
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

设置执行权限

1
chmod a+x /etc/init.d/nginx

添加到 chkconfig 管理列表

1
chkconfig --add /etc/init.d/nginx

加完这个之后,就可以使用 service 对 nginx 进行启动、重启等操作了。

1
2
3
service nginx start
service nginx reload
service nginx stop

或者

1
2
3
systemctl start nginx.service
systemctl stop nginx.service
systemctl reload nginx.service

设置开机自启

1
chkconfig nginx on

chkconfig --list nginx显示 nginx 服务在不同运行级的状态

等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动

我们也可以把 nginx 服务从 chkconfig 列表中删除

1
chkconfig --del nginx