Shell脚本实现Nginx一键部署与安全优化指南
1. Shell脚本与Nginx一键部署实战指南在Linux系统管理和Web服务部署中Shell脚本的价值怎么强调都不为过。最近在帮朋友部署Web服务时我再次体会到写好Shell脚本能节省多少重复劳动。今天就来分享一个经过实战检验的Nginx一键部署脚本这个方案已经在超过20台生产服务器上稳定运行了三年。2. 环境准备与基础配置2.1 系统环境检查在开始部署前我们需要确认基础环境是否符合要求。这个脚本适配CentOS 7/8和Ubuntu 18.04/20.04主流版本建议使用干净的系统环境。#!/bin/bash # 检查系统版本 if [ -f /etc/redhat-release ]; then OScentos OS_VERSION$(grep -oE [0-9]\.[0-9] /etc/redhat-release) elif [ -f /etc/lsb-release ]; then OSubuntu OS_VERSION$(grep DISTRIB_RELEASE /etc/lsb-release | cut -d -f2) else echo 不支持的Linux发行版 exit 1 fi注意不同Linux发行版的包管理命令和配置文件路径可能不同脚本中需要做好分支判断。2.2 依赖包安装Nginx编译安装需要一些基础开发工具和库文件以下是自动安装依赖的逻辑install_dependencies() { echo 正在安装依赖包... if [ $OS centos ]; then yum install -y gcc make pcre-devel zlib-devel openssl-devel wget else apt-get update apt-get install -y build-essential libpcre3 libpcre3-dev zlib1g-dev libssl-dev wget fi [ $? -ne 0 ] echo 依赖安装失败 exit 1 }3. Nginx安装与配置3.1 源码下载与编译我推荐使用Nginx稳定版源码编译安装这样可以灵活控制模块和优化参数。以下是自动下载和编译的脚本片段install_nginx() { NGINX_VERSION1.20.1 NGINX_USERwww NGINX_GROUPwww # 创建运行用户 id -u $NGINX_USER /dev/null || useradd -M -s /sbin/nologin $NGINX_USER # 下载源码 wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz -P /usr/local/src/ tar zxf /usr/local/src/nginx-${NGINX_VERSION}.tar.gz -C /usr/local/src/ # 编译安装 cd /usr/local/src/nginx-${NGINX_VERSION} ./configure \ --user$NGINX_USER \ --group$NGINX_GROUP \ --prefix/usr/local/nginx \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-pcre \ --with-stream make make install }3.2 服务管理配置为了方便管理我们需要将Nginx设置为系统服务configure_service() { # 创建systemd服务文件 cat /lib/systemd/system/nginx.service EOF [Unit] Descriptionnginx - high performance web server Afternetwork.target remote-fs.target nss-lookup.target [Service] Typeforking PIDFile/usr/local/nginx/logs/nginx.pid ExecStartPre/usr/local/nginx/sbin/nginx -t ExecStart/usr/local/nginx/sbin/nginx ExecReload/bin/kill -s HUP \$MAINPID ExecStop/bin/kill -s QUIT \$MAINPID PrivateTmptrue [Install] WantedBymulti-user.target EOF systemctl daemon-reload systemctl enable nginx }4. 安全加固与优化4.1 基础安全配置生产环境必须考虑安全因素以下是几个关键配置项# 在nginx.conf的http块中添加 server_tokens off; # 隐藏Nginx版本信息 client_max_body_size 10m; # 限制上传文件大小 # 每个server块应该包含的基础安全头 add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection 1; modeblock;4.2 性能优化参数根据服务器配置调整以下参数可以显著提升性能worker_processes auto; # 自动设置为CPU核心数 worker_connections 10240; # 每个worker的最大连接数 # 启用高效文件传输模式 sendfile on; tcp_nopush on; tcp_nodelay on; # 连接超时设置 keepalive_timeout 65;5. 完整脚本与使用说明5.1 一键部署完整脚本将前面所有功能整合成一个完整的部署脚本#!/bin/bash # Nginx一键部署脚本 # 功能自动安装依赖、编译安装Nginx、配置系统服务、基础安全加固 # 适用系统CentOS 7/8, Ubuntu 18.04/20.04 set -e # 定义颜色输出 RED\033[0;31m GREEN\033[0;32m YELLOW\033[0;33m NC\033[0m # 检查系统 check_system() { if [ -f /etc/redhat-release ]; then OScentos OS_VERSION$(grep -oE [0-9]\.[0-9] /etc/redhat-release) elif [ -f /etc/lsb-release ]; then OSubuntu OS_VERSION$(grep DISTRIB_RELEASE /etc/lsb-release | cut -d -f2) else echo -e ${RED}不支持的Linux发行版${NC} exit 1 fi echo -e ${GREEN}检测到系统${OS} ${OS_VERSION}${NC} } # 安装依赖 install_dependencies() { echo -e ${YELLOW}正在安装依赖包...${NC} if [ $OS centos ]; then yum install -y gcc make pcre-devel zlib-devel openssl-devel wget else apt-get update apt-get install -y build-essential libpcre3 libpcre3-dev zlib1g-dev libssl-dev wget fi [ $? -ne 0 ] echo -e ${RED}依赖安装失败${NC} exit 1 } # 安装Nginx install_nginx() { NGINX_VERSION1.20.1 NGINX_USERwww NGINX_GROUPwww echo -e ${YELLOW}正在安装Nginx ${NGINX_VERSION}...${NC} # 创建运行用户 if ! id -u $NGINX_USER /dev/null; then useradd -M -s /sbin/nologin $NGINX_USER echo -e ${GREEN}创建用户 ${NGINX_USER} 成功${NC} fi # 下载源码 if [ ! -f /usr/local/src/nginx-${NGINX_VERSION}.tar.gz ]; then wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz -P /usr/local/src/ fi if [ ! -d /usr/local/src/nginx-${NGINX_VERSION} ]; then tar zxf /usr/local/src/nginx-${NGINX_VERSION}.tar.gz -C /usr/local/src/ fi # 编译安装 cd /usr/local/src/nginx-${NGINX_VERSION} ./configure \ --user$NGINX_USER \ --group$NGINX_GROUP \ --prefix/usr/local/nginx \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-pcre \ --with-stream make make install [ $? -ne 0 ] echo -e ${RED}Nginx编译安装失败${NC} exit 1 echo -e ${GREEN}Nginx安装完成${NC} } # 配置系统服务 configure_service() { echo -e ${YELLOW}正在配置系统服务...${NC} if [ ! -f /lib/systemd/system/nginx.service ]; then cat /lib/systemd/system/nginx.service EOF [Unit] Descriptionnginx - high performance web server Afternetwork.target remote-fs.target nss-lookup.target [Service] Typeforking PIDFile/usr/local/nginx/logs/nginx.pid ExecStartPre/usr/local/nginx/sbin/nginx -t ExecStart/usr/local/nginx/sbin/nginx ExecReload/bin/kill -s HUP \$MAINPID ExecStop/bin/kill -s QUIT \$MAINPID PrivateTmptrue [Install] WantedBymulti-user.target EOF fi systemctl daemon-reload systemctl enable nginx systemctl start nginx [ $? -ne 0 ] echo -e ${RED}Nginx服务启动失败${NC} exit 1 echo -e ${GREEN}Nginx服务配置完成${NC} } # 基础安全配置 security_config() { echo -e ${YELLOW}正在配置基础安全设置...${NC} # 备份原始配置 cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak # 修改配置 sed -i /http {/a \ server_tokens off;\n client_max_body_size 10m; /usr/local/nginx/conf/nginx.conf # 测试配置并重载 /usr/local/nginx/sbin/nginx -t systemctl reload nginx [ $? -ne 0 ] echo -e ${RED}安全配置应用失败${NC} exit 1 echo -e ${GREEN}基础安全配置完成${NC} } # 主函数 main() { check_system install_dependencies install_nginx configure_service security_config echo -e \n${GREEN}Nginx部署完成${NC} echo -e Nginx版本$(/usr/local/nginx/sbin/nginx -v 21) echo -e 服务状态$(systemctl is-active nginx) echo -e 访问地址http://$(curl -s ifconfig.me) } main5.2 使用说明与注意事项执行权限运行前需要给脚本添加执行权限chmod x install_nginx.sh执行方式建议使用root用户执行./install_nginx.sh常见问题处理如果编译失败检查/usr/local/src/nginx-版本号/objs/autoconf.err文件查看具体错误端口冲突时修改/usr/local/nginx/conf/nginx.conf中的监听端口服务启动失败时查看/usr/local/nginx/logs/error.log后续管理# 启动服务 systemctl start nginx # 停止服务 systemctl stop nginx # 重载配置 systemctl reload nginx # 查看状态 systemctl status nginx6. 脚本优化与扩展6.1 参数化改造让脚本更灵活可以通过命令行参数指定版本、安装路径等while getopts v:p:u:g: opt; do case $opt in v) NGINX_VERSION$OPTARG ;; p) INSTALL_PREFIX$OPTARG ;; u) NGINX_USER$OPTARG ;; g) NGINX_GROUP$OPTARG ;; ?) echo 用法: $0 [-v 版本] [-p 安装路径] [-u 运行用户] [-g 运行用户组] ;; esac done6.2 日志功能增强添加详细的日志记录功能便于排查问题LOG_FILE/var/log/nginx_install.log log() { echo $(date %Y-%m-%d %H:%M:%S) - $1 | tee -a $LOG_FILE } # 使用示例 log 开始安装依赖包6.3 多版本支持扩展脚本以支持OpenResty、Tengine等Nginx变种install_openresty() { # OpenResty安装逻辑 ... } install_tengine() { # Tengine安装逻辑 ... } case $NGINX_TYPE in nginx) install_nginx ;; openresty) install_openresty ;; tengine) install_tengine ;; *) echo 不支持的Nginx类型 exit 1 ;; esac7. 生产环境建议在实际生产环境中部署时还需要考虑以下方面配置分离将不同站点的配置拆分为单独文件放在/usr/local/nginx/conf/conf.d/目录下日志轮转配置logrotate实现日志自动切割cat /etc/logrotate.d/nginx EOF /usr/local/nginx/logs/*.log { daily missingok rotate 30 compress delaycompress notifempty create 640 www www sharedscripts postrotate [ -f /usr/local/nginx/logs/nginx.pid ] kill -USR1 \$(cat /usr/local/nginx/logs/nginx.pid) endscript } EOF性能监控启用stub_status模块并配置监控location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; }定期维护设置计划任务检查Nginx状态并自动恢复*/5 * * * * root /usr/bin/systemctl status nginx /dev/null || systemctl restart nginx通过这个完整的Shell脚本方案我们实现了Nginx的一键化部署涵盖了从环境准备、源码编译、服务配置到安全加固的全流程。这个脚本经过多次迭代优化已经能够处理大多数常见部署场景。根据实际需求你可以进一步扩展其功能比如添加Lets Encrypt证书自动申请、负载均衡配置等功能模块。

相关新闻

RockyLinux 8.6安装与Linux核心运维实战指南

RockyLinux 8.6安装与Linux核心运维实战指南

1. RockyLinux 8.6安装详解1.1 系统镜像获取与验证RockyLinux作为RHEL的替代发行版,其8.6版本提供了长期支持。建议从清华大学开源镜像站(https://mirrors.tuna.tsinghua.edu.cn/rocky/)下载ISO文件,选择"Rocky-8.6-x86_64-d…

2026/8/6 22:52:48 阅读更多 →
RockyLinux 8.6安装与Linux核心命令实战指南

RockyLinux 8.6安装与Linux核心命令实战指南

1. RockyLinux 8.6安装实战指南RockyLinux作为RHEL的完美替代品,在企业级Linux发行版中占据重要地位。我最近在生产环境部署了RockyLinux 8.6,整个过程比预想的要顺利得多。下面分享从ISO下载到系统配置的完整流程,特别适合需要稳定企业级Lin…

2026/8/6 22:52:48 阅读更多 →
Java未死!拥抱AI,收藏这份高薪转型指南,小白程序员必备!

Java未死!拥抱AI,收藏这份高薪转型指南,小白程序员必备!

文章指出,Java语言本身并未过时,但传统Java开发模式面临AI工具替代CRUD代码的挑战。企业对“纯搬砖型Java程序员”需求下降,但对懂AI的Java程序员需求激增。文章分析了Java圈面临的三大危机:基础岗位消失、技能断层、薪资落差&…

2026/8/6 22:52:48 阅读更多 →

最新新闻

深度解析:LeetHub的技术架构与LeetCode-GitHub自动化同步实战应用

深度解析:LeetHub的技术架构与LeetCode-GitHub自动化同步实战应用

深度解析:LeetHub的技术架构与LeetCode-GitHub自动化同步实战应用 【免费下载链接】LeetHub Automatically sync your leetcode solutions to your github account - top 5 trending GitHub repository 项目地址: https://gitcode.com/gh_mirrors/le/LeetHub …

2026/8/6 23:45:12 阅读更多 →
短剧团队素材安全指南:3类高频风险+一份防护排查

短剧团队素材安全指南:3类高频风险+一份防护排查

本文将从三个高频风险出发,拆解短剧团队需要关注的安全盲区,并给出一份实际可执行的防护排查清单拍了半个月的短剧素材,价值几十万元,却可能因为一次弱密码、一次误点击,在几个小时内全部损失。对于短剧制作团队来说&a…

2026/8/6 23:45:12 阅读更多 →
3小时打造专属虚拟桌宠:VPet开源项目让你的桌面伙伴活起来!

3小时打造专属虚拟桌宠:VPet开源项目让你的桌面伙伴活起来!

3小时打造专属虚拟桌宠:VPet开源项目让你的桌面伙伴活起来! 【免费下载链接】VPet 虚拟桌宠模拟器 一个开源的桌宠软件, 可以内置到任何WPF应用程序 项目地址: https://gitcode.com/GitHub_Trending/vp/VPet 你是否厌倦了单调的电脑桌面&#xff…

2026/8/6 23:45:12 阅读更多 →
Linux定时任务(cron/at)配置与优化实践指南

Linux定时任务(cron/at)配置与优化实践指南

1. 定时任务基础概念与场景解析在服务器运维和后台开发中,定时任务就像一位不知疲倦的管家,按照预设的时间表自动执行各种重复性工作。我管理过的生产环境中,90%以上的服务器都会配置至少5种定时任务,从简单的日志清理到复杂的报表…

2026/8/6 23:45:12 阅读更多 →
Windows硬盘分区合并实用指南

Windows硬盘分区合并实用指南

1. 为什么需要合并硬盘分区? 在日常使用电脑的过程中,很多用户都会遇到硬盘分区不合理的情况。比如当初安装系统时给C盘分配的空间太小,现在系统盘空间告急;或者早期分区时过于零散,现在想要整合空间提高利用率。我自己…

2026/8/6 23:45:12 阅读更多 →
全面掌握OpenPCDet:3D点云目标检测的终极工具箱 [特殊字符]

全面掌握OpenPCDet:3D点云目标检测的终极工具箱 [特殊字符]

全面掌握OpenPCDet:3D点云目标检测的终极工具箱 🚀 【免费下载链接】OpenPCDet OpenPCDet Toolbox for LiDAR-based 3D Object Detection. 项目地址: https://gitcode.com/gh_mirrors/op/OpenPCDet OpenPCDet 是一个基于PyTorch的LiDAR点云3D目标…

2026/8/6 23:44:11 阅读更多 →

日新闻

深入解析LimboAI C++内核:架构设计与性能优化实战

深入解析LimboAI C++内核:架构设计与性能优化实战

1. 项目概述:为什么我们需要深入LimboAI的C内核?如果你是一名使用Godot引擎的游戏开发者,尤其是对AI行为逻辑有较高要求的项目,那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#…

2026/8/6 0:00:06 阅读更多 →
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

1. 项目概述与核心思路大家好,我是老张,一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架,处理了角色移动和碰撞,这一期,我们要让游戏世界…

2026/8/6 0:00:06 阅读更多 →
被动防火门市场前景发展趋势

被动防火门市场前景发展趋势

被动防火门依靠材质结构、密闭构造阻隔烟火蔓延,无需电控启动,是建筑被动消防系统核心构件,行业依托新规管控、城市更新、工业安全升级迎来稳定扩容,整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国…

2026/8/6 0:00:06 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →