服务端相关 / 06 Centos 下安装 Nginx

Centos 下安装 Nginx

今天我们的目标就是在 Centos 上搭建好 Nginx 服务,方便后续开展各种测试和学习。这也是学习其他互联网组件的第一步。接下来,我将分步骤描述源码编译的过程,并做部分说明。本次实验环境是 CentOS 7.6 系统。

1. 官网下载最新源代码,并解压

目前官方最新版本(截止到 2019 年 12 月 12 日)为 1.17.6,我们直接去官网找到下载地址。不推荐直接使用 yum 安装,因为存在如下两个问题:

  • 版本太旧,以 CentOS 为例,直接 yum 安装的版本是 1.12.2 版本,已经严重脱离了时代;
  • 无法自定义安装模块,安装目录等等,不方便后续的实验。
# 下载nginx安装包
$ wget http://nginx.org/download/nginx-1.17.6.tar.gz  
# 解压安装包
$ tar -xzf nginx-1.17.6.tar.gz

2. 依赖库提前安装

Nginx 是完全使用 C 语言开发的,所以必须要有 C 编译环境,往往 CentOS 7.6 的环境会预装 gcc 编译器,所以不用额外安装,如果没有使用 yum 直接安装即可。另外,我们使用 Nginx 的压缩功能、正则表达式功能等,需要安装一些额外的依赖库,这是必须要做的,不然在编译阶段就会报错。如下 3 个是比较 Nginx 中比较常用模块所依赖的库,请在执行 Nginx 源码编译时提前安装好。

$ sudo yum install -y zlib zlib-devel
$ sudo yum install -y pcre pcre-devel
$ sudo yum install -y openssl openssl-devel
  • 编译并安装
$ cd nginx-1.17.6
$ ./configure                # 编译,检查依赖是否正确
$ make && sudo make install  # 安装

上述编译和安装命令就如同在 360 软件中心,点击一键安装那样,直接使用默认的配置(通常会将相关文件安装到 C 盘目录)。

但是这样往往不是我们需要的。特别是在 Nginx 中,可以指定安装某些或者不安装某些模块,默认安装的模块只适合简单的场景,往往在稍微复杂的情况下,就需要额外添加其他模块,或者第三方以及自定义的模块。这高可扩展性正是 Nginx 的一大亮点。想要查看 configure 的可选参数,使用 --help 选项即可:

$ ./configure --help

在所有可选参数中,最常用的有两个:

  • –prefix=PATH:配置 Nginx 安装部署的根目录。类似于在 Windows 下安装软件,我们指定安装目录;
  • –with-xxx_module:–without-xxx_module 其中 xxx 表示 Nginx 一个模块的名称,例如:
    • with-http_ssl_module -> 支持 SSL/TLS, 即 HTTPS
    • with-http_v2_module -> 支持 HTTP/2
    • without-http_fastcgi_module -> 不使用 fastcgi

为了后续测试功能完善,这里我们编译时候,尽可能多的引入一些模块:

$ ./configure  --prefix=/root/nginx          \
--with-http_ssl_module                       \
--with-http_stub_status_module               \
--with-http_gzip_static_module               \
--with-stream                                \
--with-http_realip_module                    \
--with-http_flv_module                       \
--with-http_random_index_module              \
--with-mail                                  \
--with-pcre                                  \
$ make && sudo make install

这里 “\” 在 Linux 系统环境下表示两行之间没有换行,只是为了方便展示命令。一般而言,Nginx 的编译是比较顺利的,偶尔报错是大部分因为需要增加的模块依赖的一些库没有事先安装好。

对此,我们可以根据报错信息进行修正问题,保证编译顺利进行。在上一步骤成功后,可以看到 Nginx 我们生成的 Nginx 编译后的根目录了。简单说明根目录下的内容:
图片描述

2.1 conf 目录

这里放的是 Nginx 的相关配置文件,最重要的莫过于 nginx.conf 了,这个是默认的配置文件。

2.2 html 目录

这里有 2 个简单的 Nginx 页面,分别为 50x.html 和 index.html,index.html 是 Nginx.conf
中默认访问的页面,也就是我们后续启动 Nginx 时,默认访问 80 端口的页面。

2.3 logs 目录

暂时为空,启动 Nginx,使用默认的 Nginx.conf 配置文件,会在当前目录下生成 3 个文件,分别为:

  • access.log (记录所有请求)
  • error.log (记录所有错误信息)
  • nginx.pid (Nginx 启动的主进程 id)

2.4 sbin 目录

最最重要的文件了,C 编译的工作,最后就是为了得到这样一个二进制文件。Nginx 的启动、重新加载、停止等都是靠该命令完成。我们一般会将该目录放到系统的 PATH 变量中,这样是为了方便直接使用 Nginx 命令,系统能找到该二进制文件。不然的话,我们使用该命令就必须输入全路径,类似下面这样:

# 指定全路径
$ /root/nginx/sbin/nginx   
# 将/root/Nginx/sbin/添加到了系统的PATH变量中,就可以直接使用
$ nginx  
# 或者进入sbin目录
$ cd /root/nginx/sbin
$ ./nginx 

3. 操作 Nginx

在 Nginx 命令行的使用中,有几个非常重要的参数,也是在操作 Nginx 时经常用到的:

常用参数 作用
-t 测试 Nginx.conf 文件的语法是否正常
-c 指定 nginx.conf 文件
-s 最重要的操作,不带 - s 是启动,-s reload 是热加载 -s stop 是停止,-s reopen 是重新打开日志

实例:

# 进入sbin目录
$ cd /root/nginx/sbin        
# 启动Nginx
$ ./nginx 
# 检查nginx.conf
$ ./nginx -tc /root/nginx/conf/nginx.conf  
# 重新加载nginx
$ ./nginx -s reload 
# 停止nginx
$ ./nginx -s stop 

启动 Nginx 后,首先使用 ps -ef | grep nginx 可以查看 Nginx 进程是否已经启动,基于默认的配置,我们将看到 2 个 Nginx 的启动进程:master 进程和 worker 进程。

这是我们在前面讲到的 Nginx 的 Master-Worker 机制,后面会进行详细讲解。另外,我们可以用命令 netstat -anltp | grep 80,看到 CentOS 上已经在监听 80 端口,而这个监听服务正是 Nginx。最后可以用浏览器或者 curl 命令直接在 CentOS 机器上检查 Nginx 服务:

$ curl http://localhost

当出现 “Welcome to Nginx!" 这样的欢迎语句,表明我们的 Nginx 已经正常运行了。

4. 安装操作视频演示

5. 小结

本节文章中,我们介绍了 Nginx 在 CentOS 7.6 上的搭建过程。因为 CentOS 系统在企业的生产环境中用的最多,所以本章内容非常重要。除了介绍 Nginx 命令行的部分操作外,我们还介绍了编译 Nginx 生成的根目录。如果是相同的操作系统,我们甚至可以直接用编译好的根目录放上去直接使用,省去编译环节。