nginx安装步骤详解

一、检查网络状况

1.1、关闭防火墙

systemctl status firewalld #检查防火墙状态

systemctl stop firewalld #停用防火墙

systemctl disable firewalld #永久停用防火墙

systemctl is-enabled firewalld #检查防火墙关闭状态

systemctl status firewalld #检查防火墙状态

1.2、检查网络状态是否可以连接外网

nslookup baidu.com #验证DNS域名解析

ping -c 5 baidu.com #ping 5次

curl -I https://mirrors.aliyun.com #国内阿里云镜像源验证连接

二、新设备需要更换基础源文件(若未执行本步骤无法下载·依赖环境)

#切换到基础源文件的目录

复制代码
cd /etc/yum.repos.d/

备份原基础源文件(重命名为 .repo.bak,保留备份)

mv CentOS-Base.repo CentOS-Base.repo.bak

(可选)如果有其他多余的 .repo 文件,可临时移到备份目录(避免冲突)

mkdir -p backup && mv *.repo backup/ # 仅保留 .repo.bak 和 backup 目录

#下载阿里云源文件(若本地有下载好的阿里基础源文件,无需下载直接备份好后进行替换即可具体步骤可使用直接拖拽或者使用windows终端输入"scp(文件目录)(root@IP地址):/ " 指令进行更换 )

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

#执行 curl -o 命令会直接覆盖 /etc/yum.repos.d/CentOS-Base.repo(若未备份),若需保留原有配置,务必先执行步骤 1 的备份操作。

三、下载依赖环境

yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel

或者

复制代码
# 安装编译器、依赖库、开发工具
sudo yum install -y gcc gcc-c++ make automake autoconf libtool
# 安装核心依赖(正则、压缩、SSL)
sudo yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel

四、.创建运行用户、组

#(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)

useradd -M -s /sbin/nologin nginx

五、编译安装Nginxcd

5.1、下载 Nginx 源码包

(1)cd opt #切换到"/目录"下的opt目录

#下载Nginx 1.24.0 稳定版(可以自己选择版本号,下文中用的是1.20.0版本)

复制代码
wget https://nginx.org/download/nginx-1.24.0.tar.gz

(2)本地有下载好的文件可以直接拖拽进opt目录中或者使用windows终端scp指令来传输文件

#解压文件包

tar zxvf nginx-1.20.2.tar.gz -C /opt/

#切换到nginx-1.20.2目录内

cd nginx-1.20.2/

#编写./configure \

./configure \
--prefix=/usr/local/nginx \ #指定nginx的安装路径
--user=nginx \ #指定用户名
--group=nginx \ #指定组名
--with-http_stub_status_module
--with-http_ssl_module #启用 http_stub_status_module 模块以支持状态统计

运行

复制代码
./configure \
--prefix=/usr/local/nginx \          # Nginx 安装目录(核心参数,建议默认)
--user=nginx \                       # 运行 Nginx 的用户(避免 root 权限风险)
--group=nginx \                      # 运行 Nginx 的用户组
--with-http_ssl_module \             # 启用 HTTPS 模块(必备)
--with-http_gzip_static_module \     # 启用 gzip 静态压缩模块
--with-http_stub_status_module \     # 启用状态监控模块(查看连接数、负载等)
--with-pcre \                        # 启用 PCRE 正则支持(rewrite 模块依赖)
--with-zlib \                        # 启用 zlib 压缩支持
--without-http_autoindex_module \    # 禁用自动索引模块(避免目录遍历风险)
--without-http_ssi_module            # 禁用 SSI 模块(非必需,减少资源占用)

#make && make install 是 Linux 系统中源码编译安装软件的核心两步组合命令,承接前文配置 YUM 源的操作(通常用于解决编译依赖)

make && make install

#若 make 报错,需清理已编译的中间文件,再重新编译:

make clean #清理编译生成的二进制文件与中间文件

make distclean #彻底清理

# 给源码安装的 Nginx 创建 "全局软链接",

让你无需输入完整路径(/usr/local/nginx/sbin/nginx),直接在终端输入 nginx 命令就能操作 Nginx 服务(启动、停止、重载等)。

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作命令

#验证软连接的正确性

复制代码
ls -l /usr/local/sbin/nginx

若输出类似以下内容,说明创建成功(-> 左侧是软链接,右侧是原文件路径):

复制代码
lrwxrwxrwx 1 root root 31 11月 22 10:00 /usr/local/sbin/nginx -> /usr/loc

==========================企业=======================================

./configure \

--prefix=/usr/local/nginx \ # 安装目录

--user=nginx \ # 运行用户(后续会创建)

--group=nginx \ # 运行用户组

--with-http_ssl_module \ # 启用 HTTPS 模块

--with-http_v2_module \ # 启用 HTTP/2 协议(提升性能)

--with-http_gzip_static_module \ # 启用静态 gzip 压缩

--with-http_stub_status_module \ # 启用状态监控模块

--with-pcre \ # 启用 PCRE 正则支持(rewrite 依赖)

--with-stream \ # 启用 TCP 代理模块(如反向代理数据库)

--with-stream_ssl_module \ # 启用 TCP 代理的 SSL 支持

--http-log-path=/var/log/nginx/access.log \ # 访问日志路径

--error-log-path=/var/log/nginx/error.log \ # 错误日志路径

--pid-path=/var/run/nginx/nginx.pid \ # PID 文件路径

--lock-path=/var/lock/nginx.lock # 锁文件路径

注意:

可根据需求增减模块(如 --without-xxx 禁用不需要的模块)

企业若需特殊模块(如第三方缓存模块),可通过 --add-module 引入


六、检查、启动、重启、停止 nginx服务

#检查配置文件是否配置正确

nginx -t

#启动

nginx

#停止

cat /usr/local/nginx/logs/nginx.pid #先查看nginx的PID号

kill -3 <PID号>

kill -s QUIT <PID号>

killall -3 nginx

killall -s QUIT nginx

#重载

kill -1 <PID号>

kill -s HUP <PID号>

killall -1 nginx

killall -s HUP nginx

#日志分割,重新打开日志文件

kill -USR1 <PID号>

#平滑升级

kill -USR2 <PID号>

| 信号编号 | 信号名 | 含义 |

| -------- | ------ | ------------------------------------------------------------ |

| 0 | EXIT | 程序退出时收到该信息。 |

| 1 | HUP | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。 |

| 2 | INT | 表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。 |

| 3 | QUIT | 退出。 |

| 9 | KILL | 杀死进程,即强制结束进程。 |

| 11 | SEGV | 段错误。 |

| 15 | TERM | 正常结束进程,是 kill 命令的默认信号 |

停止的办法:

#查找所有关于nginx正在运行的进程

ps aux | grep nginx

2. 杀死所有 Nginx 进程(彻底清理)

pkill -f nginx

------------在进行下一步是必须先关闭Nginx进程不然会导致端口被占用

七、添加 Nginx 系统服务

#创建并编写nginx系统配置文件

sudo(权限不够添加) vim /usr/lib/systemd/system/nginx.service

####ExecStart 路径与 --prefix 一致

如果复制的话后方#号以及之后的注释不可复制,语法错误。

复制代码
[Unit]
Description=Nginx HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid  # PID 文件路径(安装目录下的 logs 目录)
ExecStart=/usr/local/nginx/sbin/nginx    # 启动命令路径
ExecReload=/usr/local/nginx/sbin/nginx -s reload  # 平滑重启
ExecStop=/usr/local/nginx/sbin/nginx -s stop        # 停止命令
PrivateTmp=true

[Install]
WantedBy=multi-user.target

#保存退出后,刷新 systemd 配置:

复制代码
sudo systemctl daemon-reload

#赋权

chmod 754 /usr/lib/systemd/system/nginx.service

启动Nginx

systemctl start nginx

#查看状态(确保running)

systemctl status nginx

#设置开机自启

systemctl enable nginx

  • 状态正常标志:终端显示 active (running),无报错。

八、验证安装是否成功

复制代码
/usr/local/nginx/sbin/nginx -t

成功输出:nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
#          nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

九、新版本升级:

9.1、升级前准备(关键!避免数据丢失)

1. 备份核心文件(重中之重)

升级前必须备份配置、日志和旧版本程序,防止升级失败无法回滚:

bash

运行

复制代码
# 1. 备份配置文件目录(所有 nginx.conf、虚拟主机配置等)
cp -r /usr/local/nginx/conf /usr/local/nginx/conf_bak_$(date +%Y%m%d)

# 2. 备份 Nginx 安装目录(含二进制程序、日志,可选但推荐)
cp -r /usr/local/nginx /usr/local/nginx_bak_$(date +%Y%m%d)

# 3. 备份系统服务文件(若配置了 systemd 服务)
cp /usr/lib/systemd/system/nginx.service /usr/lib/systemd/system/nginx.service_bak
2. 查看当前 Nginx 信息(确保升级参数一致)

升级时需保持编译参数与旧版本一致,否则会丢失已启用的模块(如 HTTPS、gzip 等):

bash

运行

复制代码
# 查看当前版本和编译参数(关键!记录 --prefix 和 --with-xxx 模块)
/usr/local/nginx/sbin/nginx -V

示例输出(需重点记录 configure arguments 后的所有参数):

plaintext

复制代码
nginx version: nginx/1.24.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module
3. 确认系统依赖已安装

编译新版本仍需依赖旧版本的编译环境,若之前已安装,可跳过;若未安装或不确定:

bash

运行

复制代码
# CentOS 7 安装依赖
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel
4. 下载新版本 Nginx 源码

从 Nginx 官方下载页 选择 稳定版(Stable version),推荐 1.26.2(2024 年最新稳定版):

bash

运行

复制代码
# 进入临时目录,避免污染系统目录
cd /tmp

# 下载新版本源码(替换为最新稳定版地址)
wget https://nginx.org/download/nginx-1.26.2.tar.gz

9.2、编译安装升级(推荐!适合手动编译的场景)

核心逻辑:用新版本源码编译,仅替换旧的二进制程序(nginx),保留配置和数据。

1. 解压新版本源码

bash

运行

复制代码
# 解压源码包
tar -zxvf nginx-1.26.2.tar.gz

# 进入源码目录
cd nginx-1.26.2
2. 配置编译参数(必须与旧版本一致)

将第一步记录的 configure arguments 完整复制,直接执行(确保模块不丢失):

bash

运行

复制代码
# 粘贴旧版本的编译参数,示例如下(替换为你自己的参数!)
./configure \
--prefix=/usr/local/nginx \          # 与旧版本一致,否则安装路径改变
--user=nginx \                       # 与旧版本一致
--group=nginx \                      # 与旧版本一致
--with-http_ssl_module \             # 保留已启用的模块
--with-http_gzip_static_module \
--with-http_stub_status_module
  • 若需要新增模块,可在原有参数后添加 --with-xxx(如 --with-http_flv_module);
  • 配置成功标志:无报错,最后输出 objs/Makefile 生成成功。
3. 编译(仅编译,不安装!)

bash

运行

复制代码
# 编译(多核加速:make -j $(nproc),根据CPU核心数自动分配)
make -j $(nproc)
  • 编译成功标志:无 error 信息,最后显示 make[1]: Leaving directory '/tmp/nginx-1.26.2';
  • 编译后的二进制文件在 objs/nginx 路径下。
4. 停止旧版本 Nginx 服务

替换二进制文件前必须停止服务,避免进程占用:

bash

运行

复制代码
# 停止 Nginx(用 systemd 或直接执行二进制文件)
systemctl stop nginx
# 或
/usr/local/nginx/sbin/nginx -s stop

# 验证是否完全停止(无 nginx 进程则成功)
ps -ef | grep nginx
5. 替换旧版本二进制程序

用新版本编译后的 objs/nginx 替换旧的 /usr/local/nginx/sbin/nginx:

bash

运行

复制代码
# 先备份旧的二进制文件(双重保险)
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old

# 复制新版本二进制文件到安装目录
cp /tmp/nginx-1.26.2/objs/nginx /usr/local/nginx/sbin/

# 赋予执行权限(确保可运行)
chmod +x /usr/local/nginx/sbin/nginx
6. 启动新版本并验证

bash

运行

复制代码
# 1. 检查配置文件兼容性(新版本可能不兼容旧配置,必须测试!)
/usr/local/nginx/sbin/nginx -t
# 成功输出:syntax is ok + test is successful

# 2. 启动 Nginx
systemctl start nginx

# 3. 验证版本是否升级成功
/usr/local/nginx/sbin/nginx -v
# 预期输出:nginx version: nginx/1.26.2

# 4. 验证服务状态和模块(可选)
systemctl status nginx  # 确保 active (running)
/usr/local/nginx/sbin/nginx -V  # 确认编译参数与旧版本一致(模块未丢失)

9.3、包管理器升级(yum/apt,适合通过软件源安装的场景)

若你的 Nginx 是通过 yum install nginx 或 apt install nginx 安装的,直接用包管理器升级(更简单):

1. CentOS系统(yum)

bash

运行

复制代码
# 1. 备份配置文件(同上,避免被覆盖)
cp -r /etc/nginx /etc/nginx_bak_$(date +%Y%m%d)

# 2. 升级 Nginx(自动下载最新稳定版)
yum update -y nginx

# 3. 验证版本和状态
nginx -v
systemctl restart nginx
systemctl status nginx

9.4、回滚方案(升级失败时使用)

若升级后出现报错(如配置不兼容、模块缺失),立即回滚到旧版本:

bash

运行

复制代码
# 1. 停止新版本 Nginx
systemctl stop nginx

# 2. 恢复旧版本二进制文件(编译安装场景)
mv /usr/local/nginx/sbin/nginx_old /usr/local/nginx/sbin/nginx

# 3. 恢复备份的配置文件(若修改过配置)
rm -rf /usr/local/nginx/conf
mv /usr/local/nginx/conf_bak_2025xxxx /usr/local/nginx/conf

# 4. 启动旧版本
systemctl start nginx

# 5. 验证回滚成功
/usr/local/nginx/sbin/nginx -v  # 应显示旧版本号

9.5、常见问题排查

1. 编译时提示 "SSL modules require the OpenSSL library"

原因:缺少 OpenSSL 依赖,执行:

bash

运行

复制代码
yum install -y openssl openssl-devel  # CentOS
apt install -y libssl-dev             # Ubuntu

2. 启动时提示 "nginx: emerg unknown directive xxx"

原因:新版本不兼容旧配置中的某些指令,或编译时未启用对应模块:

  • 解决方案 1:查看 nginx -t 报错信息,删除 / 修改不兼容的指令;
  • 解决方案 2:重新编译,确保添加了对应的模块(参考旧版本的 nginx -V 参数)。

3. 替换二进制文件后提示 "Permission denied"

原因:权限不足,执行:

bash

运行

复制代码
chmod +x /usr/local/nginx/sbin/nginx
chown -R nginx:nginx /usr/local/nginx/  # 确保运行用户有权限

4. 升级后端口被占用

原因:旧 Nginx 进程未完全停止,执行:

bash

运行

复制代码
pkill -f nginx  # 强制杀死所有 Nginx 进程
systemctl start nginx
相关推荐
女神下凡32 分钟前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范
@兽血沸腾1 小时前
Windows系统安装Jenkins部署应用至远程Windows服务器操作指南
运维·服务器·jenkins
且从容.4 小时前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道4 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
讯捷蓝达6 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
且从容.7 小时前
ubuntu安装flink
linux·ubuntu·flink
数字新视界9 小时前
动环监控信创适配在智能机房管理中的应用价值与未来展望
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
爱和冰阔落9 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨9 小时前
WSL2的安装与使用
linux·wsl
微小的鱼9 小时前
Linux的渲染与显示系统链路
android·java·linux