[TOC] #### 1. 前言 --- 本文使用的操作系统: | 名称 | 描述 | 文章 | | ------------ | ------------ | ------------ | | Oracle VM VirtualBox | 虚拟机软件 | [VirtualBox 使用介绍](https://www.itqaq.com/index/627.html) | | CentOS-7-x86_64-Minimal-2009.iso | CentOS 7.9 最小化安装镜像文件 | [VirtualBox 安装 CentOS 7](https://www.itqaq.com/index/628.html) | 操作系统信息如下所示 ``` cat /etc/redhat-release ```  #### 2. 源码包 --- 进入 nginx 官网:<https://nginx.org>,查看最新稳定版,复制链接地址,本文使用的是当前最新稳定版本 v1.24.0 ``` https://nginx.org/download/nginx-1.24.0.tar.gz ```  #### 3. 编译安装 --- 本文将 nginx 源码包存放在 `/usr/local/src` 目录 ```bash # 进入目录 cd /usr/local/src # 下载 nginx 源码包 wget https://nginx.org/download/nginx-1.24.0.tar.gz ``` 当使用 wget 下载 nginx 源码包时,提示命令不存在。使用 yum 安装即可,然后重新使用 wget 下载 nginx 源码包 ```bash yum install wget -y ```  解压 nginx 源码包,进入源码包目录,执行预编译命令 nginx 的安装目录默认是 `/usr/local/nginx`,`--prefix` 配置项缺省时默认就是该目录,但不建议省略该参数选项 ```bash tar -zxf nginx-1.24.0.tar.gz cd nginx-1.24.0 ./configure --prefix=/usr/local/nginx ``` 当预编译出现以下报错时,表示没有 gcc 编译器,使用 yum 安装即可 nginx 是使用 c 语言编写的程序,因此想要运行 nginx 就需要安装一个编译工具。gcc 就是一个开源的编译器集合,用于处理各种各样的语言,其中就包含了 c 语言,运行以下命令安装即可 ```bash # 安装 gcc 编译器 yum install gcc -y # 可通过以下命令来查看 gcc 是否安装成功 gcc --version ```  当预编译出现以下报错时,表示缺少 pcre(兼容正则表达式库),使用 yum 安装即可 nginx 在编译过程中需要使用到 pcre 库,因为在 nginx 的 Rewrite 模块和 http 核心模块都会使用到 pcre 正则表达式语法 ```bash # 安装 pcre 库 yum install pcre pcre-devel -y # 可以通过以下命令来查看是否安装成功 rpm -qa pcre pcre-devel ```  当预编译出现以下报错时,表示缺少 zlib,使用 yum 安装即可 zlib 库提供了开发人员的压缩算法,在 nginx 的各个模块中需要使用 gzip 压缩,所以我们也需要安装其库及源代码 ```bash # 安装 zlib 库 yum install zlib zlib-devel -y # 可以通过以下命令来查看是否安装成功 rpm -qa zlib zlib-devel ```  当看到以下内容,表示预编译成功,目前最小化安装成功了,也就是使用最少的参数  当我们配置 SSL 证书,实现 HTTPS 访问时,会将监听的端口改为 `443 ssl`,重载配置发现报错了 ``` server { listen 443 ssl; server_name www.itqaq.com; } ``` ``` nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:36 ``` 这是因为没有安装 SSL 模块,不支持配置 SSL,运行以下命令安装即可 ```bash # 安装 openssl 库 yum install openssl openssl-devel -y # 可以通过以下命令来查看是否安装成功 rpm -qa openssl openssl-devel ``` ```bash ./configure --prefix=/usr/local/nginx --with-http_ssl_module ```  #### 4. 安装总结 --- 环境准备:安装 wget 和 编译 nginx 所需要的依赖包 ```bash yum install wget -y yum install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel -y ``` 下载 nginx 源码包 ```bash # 源码包存放目录 cd /usr/local/src # 下载 nginx 源码包 wget https://nginx.org/download/nginx-1.24.0.tar.gz # 解压缩 nginx 源码包 tar -zxf nginx-1.24.0.tar.gz # 进入源码包目录 cd nginx-1.24.0 ``` 执行编译安装 ```bash # 预编译 ./configure --prefix=/usr/local/nginx \ --with-http_stub_status_module \ --with-http_ssl_module # 编译并安装 make && make install ``` 当 nginx 安装成功后,`/usr/local/nginx` 目录内容如下所示  关闭防火墙 ```bash # 关闭防火墙状态 systemctl stop firewalld # 关闭防火墙开机自启 systemctl disable firewalld ``` #### 5. 启动 nginx --- 进入 `/usr/local/nginx/sbin` 目录,运行以下命令启动 nginx 服务 ```bash # 进入 nginx 安装目录下的 sbin 目录 cd /usr/local/nginx/sbin # 启动 nginx 服务,相对路径写法,./ 不能省略,表示执行 nginx 文件 ./nginx ``` 也可以使用绝对路径写法 ```bash /usr/local/nginx/sbin/nginx ```  绝对路径命令比较长,可以定义命令的别名简化命令 ```bash # 定义命令别名 alias nginx=/usr/local/nginx/sbin/nginx # 使用别名控制 nginx 服务启停 nginx # 启动 nginx -s stop # 停止 nginx -s reload # 重启 ``` 命令补充: ```bash ./nginx -s stop # 快速停止 ./nginx -s quit # 优雅关闭,在关闭前完成已经接受的连接请求 ./nginx -s reload # 重新加载配置 ``` 使用 curl 命令测试访问,看到以下内容说明启动成功 ```bash curl 127.0.0.1 ```  #### 6. 关闭防火墙 --- 通过以下命令查看虚拟主机的局域网 IP ```bash ip addr | grep 192.168 ```  目前局域网内其他电脑无法访问虚拟主机,如下所示,这是因为防火墙是开启状态  运行以下命令,即可关闭防火墙,如果只是使用虚拟机进行测试,可以直接关闭防火墙 在正式环境中,可以开启防火墙,只需要开放相应端口即可,[点击查看防火墙命令更多用法](https://www.itqaq.com/index/126.html) ```bash # 查看防火墙状态(running|not running) firewall-cmd --state # 关闭防火墙状态 systemctl stop firewalld # 关闭防火墙开机自启 systemctl disable firewalld ```  此时,就可以发现能访问了  #### 7. 设置系统服务 --- 创建服务脚本 ```bash vi /usr/lib/systemd/system/nginx.service ``` 服务脚本内容 ``` [Unit] Description=nginx - web server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target ``` 运行以下命令,创建的 nginx 系统服务生效 ```bash # 重新加载系统服务 systemctl daemon-reload ``` nginx 系统服务相关命令,可以更加方便的管理 nginx 服务 ```bash # 查看 nginx 服务状态 systemctl status nginx # 启动 nginx 服务 systemctl start nginx # 关闭 nginx 服务 systemctl stop nginx # 重载 nginx 配置 systemctl reload nginx # 启用 nginx 服务开机自启 systemctl enable nginx # 关闭 nginx 服务开机自启 systemctl disable nginx ``` #### 8. 卸载 nginx --- 步骤一:停止 nginx 服务 ```bash /usr/local/nginx/sbin/nginx -s stop ``` 步骤二:将安装的 nginx 删除 ```bash rm -rf /usr/local/nginx ``` 步骤三:将安装包之前编译的环境清除掉 ```bash cd /usr/local/src/nginx-1.24.0 make clean ```