1. 前言
本文使用的操作系统:
名称 | 描述 | |
---|---|---|
Oracle VM VirtualBox | 虚拟机软件 | |
CentOS-7-x86_64-Minimal-2009.iso | CentOS 7.9 最小化安装镜像文件 |
操作系统信息如下所示
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
目录
# 进入目录
cd /usr/local/src
# 下载 nginx 源码包
wget https://nginx.org/download/nginx-1.24.0.tar.gz
当使用 wget 下载 nginx 源码包时,提示命令不存在。使用 yum 安装即可,然后重新使用 wget 下载 nginx 源码包
yum install wget -y
解压 nginx 源码包,进入源码包目录,执行预编译命令
nginx 的安装目录默认是 /usr/local/nginx
,--prefix
配置项缺省时默认就是该目录,但不建议省略该参数选项
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 语言,运行以下命令安装即可
# 安装 gcc 编译器
yum install gcc -y
# 可通过以下命令来查看 gcc 是否安装成功
gcc --version
当预编译出现以下报错时,表示缺少 pcre(兼容正则表达式库),使用 yum 安装即可
nginx 在编译过程中需要使用到 pcre 库,因为在 nginx 的 Rewrite 模块和 http 核心模块都会使用到 pcre 正则表达式语法
# 安装 pcre 库
yum install pcre pcre-devel -y
# 可以通过以下命令来查看是否安装成功
rpm -qa pcre pcre-devel
当预编译出现以下报错时,表示缺少 zlib,使用 yum 安装即可
zlib 库提供了开发人员的压缩算法,在 nginx 的各个模块中需要使用 gzip 压缩,所以我们也需要安装其库及源代码
# 安装 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,运行以下命令安装即可
# 安装 openssl 库
yum install openssl openssl-devel -y
# 可以通过以下命令来查看是否安装成功
rpm -qa openssl openssl-devel
./configure --prefix=/usr/local/nginx --with-http_ssl_module
4. 安装总结
环境准备:安装 wget 和 编译 nginx 所需要的依赖包
yum install wget -y
yum install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel -y
下载 nginx 源码包
# 源码包存放目录
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
执行编译安装
# 预编译
./configure --prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module
# 编译并安装
make && make install
当 nginx 安装成功后,/usr/local/nginx
目录内容如下所示
关闭防火墙
# 关闭防火墙状态
systemctl stop firewalld
# 关闭防火墙开机自启
systemctl disable firewalld
5. 启动 nginx
进入 /usr/local/nginx/sbin
目录,运行以下命令启动 nginx 服务
# 进入 nginx 安装目录下的 sbin 目录
cd /usr/local/nginx/sbin
# 启动 nginx 服务,相对路径写法,./ 不能省略,表示执行 nginx 文件
./nginx
也可以使用绝对路径写法
/usr/local/nginx/sbin/nginx
绝对路径命令比较长,可以定义命令的别名简化命令
# 定义命令别名
alias nginx=/usr/local/nginx/sbin/nginx
# 使用别名控制 nginx 服务启停
nginx # 启动
nginx -s stop # 停止
nginx -s reload # 重启
命令补充:
./nginx -s stop # 快速停止
./nginx -s quit # 优雅关闭,在关闭前完成已经接受的连接请求
./nginx -s reload # 重新加载配置
使用 curl 命令测试访问,看到以下内容说明启动成功
curl 127.0.0.1
6. 关闭防火墙
通过以下命令查看虚拟主机的局域网 IP
ip addr | grep 192.168
目前局域网内其他电脑无法访问虚拟主机,如下所示,这是因为防火墙是开启状态
运行以下命令,即可关闭防火墙,如果只是使用虚拟机进行测试,可以直接关闭防火墙
在正式环境中,可以开启防火墙,只需要开放相应端口即可。https://www.lengleng.net
# 查看防火墙状态(running|not running)
firewall-cmd --state
# 关闭防火墙状态
systemctl stop firewalld
# 关闭防火墙开机自启
systemctl disable firewalld
此时,就可以发现能访问了
7. 设置系统服务
创建服务脚本
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 系统服务生效
# 重新加载系统服务
systemctl daemon-reload
nginx 系统服务相关命令,可以更加方便的管理 nginx 服务
# 查看 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 服务
/usr/local/nginx/sbin/nginx -s stop
步骤二:将安装的 nginx 删除
rm -rf /usr/local/nginx
步骤三:将安装包之前编译的环境清除掉
cd /usr/local/src/nginx-1.24.0
make clean