当前位置: 首页 > news >正文

Nginx 实战系列(七)—— Nginx一键安装脚本详解

文章目录

  • 前言
  • 一、脚本基础设置
    • 1.1 权限验证
    • 1.2 变量定义
  • 二、系统环境准备
    • 2.1 关闭防火墙与SELinux
  • 三、依赖安装与用户配置
    • 3.1 安装编译依赖
    • 3.2 创建Nginx运行用户
  • 四、Nginx源码编译与安装
    • 4.1 下载与解压源码
    • 4.2 配置编译选项
    • 4.3 编译与安装
  • 五、服务配置与管理
    • 5.1 创建软链接
    • 5.2 配置Systemd服务
    • 5.3 启动与验证服务
  • 六、脚本使用方式与结果展示
  • 总结
    • 附:完整脚本

前言

在Web服务领域,Nginx因其高性能、高并发和低内存占用等特点,已成为最受欢迎的Web服务器和反向代理服务器之一。然而,手动编译安装Nginx往往步骤繁琐,容易出错,尤其是在生产环境中,快速、可靠地部署Nginx显得尤为重要。

本文将以一个自动安装Nginx的Shell脚本为基础,详细介绍如何在CentOS系统上自动化完成Nginx的安装、配置和服务管理,帮助系统管理员和开发者提升部署效率,减少人为错误。


一、脚本基础设置

1.1 权限验证

脚本首先检查当前用户是否为root用户,确保具有执行安装所需的权限:

if [ $(id -u) -ne 0 ]; thenecho "请使用root用户运行此脚本!"exit 1
fi

1.2 变量定义

定义Nginx版本、下载地址、安装路径等变量,便于后续维护和修改:

NGINX_VERSION="1.20.2"
NGINX_URL="https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz"
INSTALL_DIR="/opt"
NGINX_SOURCE_DIR="${INSTALL_DIR}/nginx-${NGINX_VERSION}"
NGINX_INSTALL_DIR="/usr/local/nginx"

二、系统环境准备

2.1 关闭防火墙与SELinux

为避免端口访问限制,脚本会临时关闭防火墙并禁用SELinux:

echo "正在关闭防火墙和SELinux..."
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

注意:生产环境中请根据实际安全策略调整,不建议直接禁用SELinux。


三、依赖安装与用户配置

3.1 安装编译依赖

安装编译Nginx所需的开发工具和库:

echo "正在安装依赖包..."
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel wget > /dev/null

3.2 创建Nginx运行用户

为Nginx创建一个无登录权限的系统用户,提升安全性:

echo "正在创建Nginx运行用户..."
if ! id -u nginx &>/dev/null; thenuseradd -M -s /sbin/nologin nginx
elseecho "用户nginx已存在,跳过创建"
fi

四、Nginx源码编译与安装

4.1 下载与解压源码

下载Nginx源码并解压到指定目录:

echo "正在下载Nginx源码..."
cd ${INSTALL_DIR}
if [ ! -f "nginx-${NGINX_VERSION}.tar.gz" ]; thenwget ${NGINX_URL} > /dev/null
elseecho "Nginx源码包已存在,跳过下载"
fiif [ -d "${NGINX_SOURCE_DIR}" ]; thenecho "删除已存在的源码目录..."rm -rf ${NGINX_SOURCE_DIR}
fiecho "正在解压Nginx源码..."
tar zxvf nginx-${NGINX_VERSION}.tar.gz -C ${INSTALL_DIR} > /dev/null

4.2 配置编译选项

配置Nginx编译参数,包括安装路径、运行用户和启用模块:

echo "正在编译安装Nginx..."
cd ${NGINX_SOURCE_DIR}./configure \
--prefix=${NGINX_INSTALL_DIR} \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module > /dev/nullif [ $? -ne 0 ]; thenecho "配置失败,请检查错误!"exit 1
fi

启用http_stub_status_module用于状态监控,http_ssl_module支持HTTPS。

4.3 编译与安装

执行编译和安装过程:

make > /dev/null && make install > /dev/null
if [ $? -ne 0 ]; thenecho "编译安装失败,请检查错误!"exit 1
fi

五、服务配置与管理

5.1 创建软链接

将Nginx可执行文件链接到系统路径:

echo "创建Nginx命令软链接..."
ln -sf ${NGINX_INSTALL_DIR}/sbin/nginx /usr/local/sbin/

5.2 配置Systemd服务

创建Nginx的Systemd服务文件,实现服务管理:

echo "配置Nginx系统服务..."
cat > /lib/systemd/system/nginx.service <<EOF
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=${NGINX_INSTALL_DIR}/logs/nginx.pid
ExecStart=${NGINX_INSTALL_DIR}/sbin/nginx
ExecReload=/bin/kill -s HUP \$MAINPID
ExecStop=/bin/kill -s QUIT \$MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOFchmod 754 /lib/systemd/system/nginx.service

5.3 启动与验证服务

重新加载Systemd配置并启动Nginx:

echo "启动Nginx服务..."
systemctl daemon-reload
systemctl start nginx.service
systemctl enable nginx.service

验证安装是否成功:

if systemctl is-active --quiet nginx.service; thenecho "Nginx安装成功并已启动!"echo "Nginx版本信息:"nginx -vecho ""echo "可以通过以下命令管理Nginx:"echo "启动Nginx: systemctl start nginx"echo "停止Nginx: systemctl stop nginx"echo "重启Nginx: systemctl restart nginx"echo "查看状态: systemctl status nginx"
elseecho "Nginx启动失败,请检查错误!"exit 1

六、脚本使用方式与结果展示

  • 将脚本保存为 install_nginx.sh
  • 赋予执行权限:chmod +x install_nginx.sh
  • 执行脚本:./install_nginx.sh

脚本执行结果:
在这里插入图片描述

在这里插入图片描述


总结

通过本文介绍的自动化安装脚本,我们可以快速、标准地在CentOS系统上部署Nginx,并完成基本的服务配置。该脚本具有以下优点:

  1. 自动化程度高:从依赖安装到服务启动全程自动化;
  2. 灵活可配置:通过修改变量可轻松切换Nginx版本;
  3. 符合安全规范:使用非root用户运行Nginx,减少安全风险;
  4. 服务化管理:通过Systemd统一管理Nginx服务,便于运维。

当然,在实际生产环境中,还需根据需求进一步配置Nginx的虚拟主机、日志切割、性能调优等选项。但本脚本作为一个基础安装工具,无疑为后续的配置工作打下了良好的基础。


附:完整脚本

#!/bin/bash# Nginx自动化安装脚本
# 适用于CentOS系统
# 版本:nginx-1.20.2# 检查是否为root用户
if [ $(id -u) -ne 0 ]; thenecho "请使用root用户运行此脚本!"exit 1
fi# 定义变量
NGINX_VERSION="1.20.2"
NGINX_URL="https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz"
INSTALL_DIR="/opt"
NGINX_SOURCE_DIR="${INSTALL_DIR}/nginx-${NGINX_VERSION}"
NGINX_INSTALL_DIR="/usr/local/nginx"# 1. 关闭防火墙和SELinux
echo "正在关闭防火墙和SELinux..."
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config# 2. 安装依赖包
echo "正在安装依赖包..."
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel wget > /dev/null# 3. 创建运行用户和组
echo "正在创建Nginx运行用户..."
if ! id -u nginx &>/dev/null; thenuseradd -M -s /sbin/nologin nginx
elseecho "用户nginx已存在,跳过创建"
fi# 4. 下载并解压Nginx源码
echo "正在下载Nginx源码..."
cd ${INSTALL_DIR}
if [ ! -f "nginx-${NGINX_VERSION}.tar.gz" ]; thenwget ${NGINX_URL} > /dev/null
elseecho "Nginx源码包已存在,跳过下载"
fiif [ -d "${NGINX_SOURCE_DIR}" ]; thenecho "删除已存在的源码目录..."rm -rf ${NGINX_SOURCE_DIR}
fiecho "正在解压Nginx源码..."
tar zxvf nginx-${NGINX_VERSION}.tar.gz -C ${INSTALL_DIR} > /dev/null# 5. 编译安装Nginx
echo "正在编译安装Nginx..."
cd ${NGINX_SOURCE_DIR}./configure \
--prefix=${NGINX_INSTALL_DIR} \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module > /dev/nullif [ $? -ne 0 ]; thenecho "配置失败,请检查错误!"exit 1
fimake > /dev/null && make install > /dev/nullif [ $? -ne 0 ]; thenecho "编译安装失败,请检查错误!"exit 1
fi# 创建软链接
echo "创建Nginx命令软链接..."
ln -sf ${NGINX_INSTALL_DIR}/sbin/nginx /usr/local/sbin/# 6. 添加Nginx系统服务
echo "配置Nginx系统服务..."
cat > /lib/systemd/system/nginx.service <<EOF
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=${NGINX_INSTALL_DIR}/logs/nginx.pid
ExecStart=${NGINX_INSTALL_DIR}/sbin/nginx
ExecReload=/bin/kill -s HUP \$MAINPID
ExecStop=/bin/kill -s QUIT \$MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOFchmod 754 /lib/systemd/system/nginx.service# 启动Nginx服务
echo "启动Nginx服务..."
systemctl daemon-reload
systemctl start nginx.service
systemctl enable nginx.service# 检查Nginx状态
if systemctl is-active --quiet nginx.service; thenecho "Nginx安装成功并已启动!"echo "Nginx版本信息:"nginx -vecho ""echo "可以通过以下命令管理Nginx:"echo "启动Nginx: systemctl start nginx"echo "停止Nginx: systemctl stop nginx"echo "重启Nginx: systemctl restart nginx"echo "查看状态: systemctl status nginx"
elseecho "Nginx启动失败,请检查错误!"exit 1
fiexit 0

希望本文能帮助你更高效地部署和管理Nginx服务!


文章转载自:

http://WrIQ6hqR.qLsbz.cn
http://G2sF9xc2.qLsbz.cn
http://B3PBZ4mp.qLsbz.cn
http://wyUIlgGj.qLsbz.cn
http://y8XaqmIL.qLsbz.cn
http://rMpCtJUf.qLsbz.cn
http://dUMc4kgJ.qLsbz.cn
http://wBg5iXAo.qLsbz.cn
http://fHnYO9jG.qLsbz.cn
http://z9XY1lSF.qLsbz.cn
http://WACZVbix.qLsbz.cn
http://4zKzjYA3.qLsbz.cn
http://LnPRtibX.qLsbz.cn
http://M7HHWfJ7.qLsbz.cn
http://QH1YKEIW.qLsbz.cn
http://dLdOZCwq.qLsbz.cn
http://8BKOXqtH.qLsbz.cn
http://lBULYXeO.qLsbz.cn
http://vyAaXSLw.qLsbz.cn
http://v185SzKk.qLsbz.cn
http://W9ySKFDS.qLsbz.cn
http://mlI5jdb6.qLsbz.cn
http://AISSXQJp.qLsbz.cn
http://AujKsar3.qLsbz.cn
http://gIC0hnvW.qLsbz.cn
http://xKaoa03j.qLsbz.cn
http://wPN7FvKW.qLsbz.cn
http://BG7CLPaq.qLsbz.cn
http://A4GIc2bB.qLsbz.cn
http://31dfaZBh.qLsbz.cn
http://www.dtcms.com/a/375608.html

相关文章:

  • [数据结构——lesson5.1链表的应用]
  • ARM汇编 启动代码
  • ctfshow - web入门 - JAVA
  • 无法加载 DLL“xxxxxxx.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
  • 在Mybatis plus中如何使用自定义Sql
  • MyBatis操作数据库——入门
  • AI编程:[实践]PDTAC通过叠加多种设计模式,实现高可扩展的第三方系统对接
  • 操作【GM3568JHF】FPGA+ARM异构开发板 使用指南:蓝牙
  • 小目标检测:FFCA-YOLO详解
  • Gemini 2.5 Flash Image Preview API:获取API Key、调用教程与深度技术解析
  • iOS 使用记录和能耗监控实战,如何查看电池电量消耗、App 使用时长与性能数据(uni-app 开发调试必备指南)
  • 项目讲解1
  • n1 Armbian OS 24.11.0 noble 安装suricata
  • 【算法--链表】114.二叉树展开为链表--通俗讲解
  • IntelliJ IDEA 2025.1 Java Stream Debugger 快速使用指南
  • IDEA2024.1使用Debug调试工具F8步过失效解决方法
  • Java 大视界 -- Java 大数据在智能交通智能公交系统优化与乘客出行服务提升中的应用(409)
  • Java数据结构——树
  • vue3和vue2生命周期的区别
  • 《棒球小白》棒球球落地了才能跑垒吗·棒球1号位
  • 排序算法(Java)
  • Oracle数据库
  • 腾讯开源智能体框架Youtu-agent全解析:特性、架构与实战指南
  • 【2511系统分析师备考-快速阅读一】
  • Vue 学习随笔系列二十五 -- 多文件上传并支持修改
  • 从0到1学习Vue框架Day03
  • 【Redis五种数据类型】
  • Redis 双向同步如何避免循环?【附实操演示】
  • Redis单线程模型为什么快?
  • At least one <template> or <script> is required in a single file component