一、编译安装Nginx服务

1. 准备工作
  • 官方源码包:从 nginx.org/download/nginx-1.20.2.tar.gz 下载
  • 环境配置:关闭防火墙和SELinux(生产环境建议配置规则而非直接关闭)
    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0  # 临时关闭SELinux,永久关闭需修改/etc/selinux/config
    
  • 将下载的 nginx-1.20.2.tar.gz 上传至 /opt 目录
2. 安装依赖包

Nginx编译依赖以下开发库,需提前安装:

yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel
3. 创建专用运行用户

为避免权限问题,创建无登录权限的专用用户:

useradd -M -s /sbin/nologin nginx  # -M:不创建家目录;-s:指定shell为nologin
4. 编译安装Nginx
基础编译配置(适用于简单场景)
cd /opt
tar zxvf nginx-1.20.2.tar.gz -C /opt/  # 解压至/opt目录
cd nginx-1.20.2/

# 配置编译参数(注意反斜杠后无空格,且最后一行无反斜杠)
./configure \
--prefix=/usr/local/nginx \          # 安装路径
--user=nginx \                       # 运行用户
--group=nginx \                      # 运行用户组
--with-http_stub_status_module \     # 启用状态统计模块
--with-http_ssl_module               # 启用HTTPS支持

# 编译并安装
make && make install

# 创建软链接,方便系统识别nginx命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
企业级编译配置(适用于生产环境)
# 先创建日志和PID目录(避免启动时权限错误)
mkdir -p /var/log/nginx /var/run/nginx /var/lock/
chown -R nginx:nginx /var/log/nginx /var/run/nginx /var/lock/

# 企业级模块配置
./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             # 锁文件路径

make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

注意:可通过 --without-xxx 禁用不需要的模块,第三方模块需用 --add-module 引入。

5. Nginx服务管理
基础操作
nginx -t  # 检查配置文件语法(关键!启动前必做)
nginx     # 启动服务
停止/重载/升级
操作命令(推荐使用信号名,更易读)
停止kill -s QUIT $(cat /usr/local/nginx/logs/nginx.pid)
重载配置kill -s HUP $(cat /usr/local/nginx/logs/nginx.pid)
日志分割kill -s USR1 $(cat /usr/local/nginx/logs/nginx.pid)
平滑升级kill -s USR2 $(cat /usr/local/nginx/logs/nginx.pid)
版本升级步骤(以升级到1.22.0为例)
# 1. 解压新版本源码
tar zxvf nginx-1.22.0.tar.gz -C /opt/
cd nginx-1.22.0/

# 2. 用与旧版本相同的配置参数编译(关键!避免模块不一致)
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module  # 需与旧版本保持一致

# 3. 编译(不要执行make install!)
make

# 4. 替换二进制文件
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old  # 备份旧版本
cp objs/nginx /usr/local/nginx/sbin/nginx                       # 复制新版本

# 5. 平滑升级(不中断服务)
1.第一种
kill -s USR2 $(cat /usr/local/nginx/logs/nginx.pid)  # 启动新进程
kill -s QUIT $(cat /usr/local/nginx/logs/nginx.pid.oldbin)  # 关闭旧进程
2.第二种
cd nginx-1.22.0/  
make upgrade
/usr/local/nginx/sbin/nginx -s reload

# 验证版本
nginx -V  # 查看编译参数和版本
6. 添加系统服务(支持systemctl管理)
方法一:传统init.d服务(兼容CentOS 6)
vim /etc/init.d/nginx

写入以下内容(修正原内容中chkconfig运行级别错误):

#!/bin/bash
#chkconfig: 2345 99 20  # 运行级别2/3/4/5,开机优先级99,关机优先级20
#description:Nginx Service Control Script

COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"

case "$1" in
start)
  $COM
  ;;
stop)
  kill -s QUIT $(cat $PID)
  ;;
restart)
  $0 stop
  $0 start
  ;;
reload)
  kill -s HUP $(cat $PID)
  ;;
*)
  echo "Usage: $0 {start|stop|restart|reload}"
  exit 1
esac
exit 0

添加权限并注册服务:

chmod +x /etc/init.d/nginx
chkconfig --add nginx  # 添加到系统服务
# 管理命令
service nginx start|stop|restart|reload
方法二:systemd服务(推荐,适用于CentOS 7+)
vim /lib/systemd/system/nginx.service

写入以下内容:

[Unit]
Description=nginx  # 服务描述
After=network.target  # 网络启动后再启动nginx

[Service]
Type=forking  # 后台运行模式
PIDFile=/usr/local/nginx/logs/nginx.pid  # PID文件路径
ExecStart=/usr/local/nginx/sbin/nginx  # 启动命令(绝对路径)
ExecReload=/bin/kill -s HUP $MAINPID  # 重载命令
ExecStop=/bin/kill -s QUIT $MAINPID   # 停止命令
PrivateTmp=true  # 分配独立临时空间

[Install]
WantedBy=multi-user.target  # 多用户模式下启动

设置权限并启用:

chmod 754 /lib/systemd/system/nginx.service  # 权限设置
systemctl daemon-reload  # 重载systemd配置
# 管理命令
systemctl start nginx.service    # 启动
systemctl enable nginx.service   # 开机自启
systemctl stop nginx.service     # 停止
systemctl reload nginx.service   # 重载配置

总结

本文详细梳理了在Linux系统(以CentOS为例)下编译安装Nginx服务的完整流程,从前期准备到生产级配置、服务管理,形成了一套可落地的操作指南,核心内容可概括为以下几点:

  1. 基础准备是前提:需先获取Nginx官方源码包并上传至指定目录,同时根据场景处理防火墙与SELinux(生产环境建议配置规则而非直接关闭),避免后续部署受阻。

  2. 依赖与用户保障安全:通过yum安装gcc、pcre、openssl等编译必需的开发库,确保编译顺利;同时创建无登录权限的nginx专用用户,规避权限泄露风险。

  3. 编译配置分场景选择:提供两种编译方案——基础配置适用于简单场景,仅启用HTTPS、状态统计等核心模块;企业级配置则针对生产环境,新增HTTP/2、TCP代理、自定义日志/PID路径等,满足高可用与可监控需求。

  4. 服务管理兼顾灵活与稳定:基础操作中强调nginx -t(配置语法检查)是启动前的关键步骤;通过信号命令实现停止、重载、日志分割,尤其版本升级环节(以1.22.0为例),通过“编译不安装+平滑替换二进制文件”,实现服务无中断升级。

  5. 系统服务适配不同版本:提供两种服务注册方式——传统init.d脚本兼容CentOS 6,systemd服务(推荐)适配CentOS 7+,均支持开机自启与便捷的启停/重载操作,统一服务管理入口。

更多推荐