引言

这里主要是一个一键编译安装 Nginx的脚本

修订记录

序号时间修改内容
12024.04.23创建Nginx的脚本安装文件
22024.04.24补充用户配置修改部分
32024.04.25补充Nginx安装前检测
42024.05.13将安装前检查和创建目录摘出来

详细教程

这里的脚本是对源码编译方式进行浓缩的,如果遇到一些报错或异常

欢迎移步源码编译Nginx的教程文档

快速执行

复制下面的内容,直接粘贴到服务器的控制台即可

wget http://static.hw13.cn/usr/uploads/2024/04/nginx.sh && sh nginx.sh

注意,脚本内部有一些敏感操作,需要当前执行的用户有 sudo权限,请使用具有 sudo权限的用户执行,或使用 root用户执行

脚本正文

#!/bin/bash # 【版本确定】要安装的Nginx版本 NGINX_VERSION="" # 【存放位置】要安装的Nginx源码包存放位置 NGINX_SRC_DIR="" # 【安装位置】要安装的Nginx位置 NGINX_INSTALL_DIR="" # 【用户名】Nginx启动用户名 NGINX_USER="" # 【输出开关】Nginx编译过程是否输出 NGINX_OUTPUT=false # 默认值 NGINX_DEFAULT_USER="nginx" NGINX_DEFAULT_VERSION="1.25.3" NGINX_DEFAULT_SRC_DIR="/server/data/packages" NGINX_DEFAULT_OUTPUT=false readUserInputConfig() { echo "------------------------------------ NGINX 脚本安装程序 ------------------------------------" read -p "请输入源码包存放位置(默认:${NGINX_DEFAULT_SRC_DIR},不修改直接回车):" NGINX_SRC_DIR read -p "请输入nginx使用的用户名(默认:${NGINX_DEFAULT_USER},不修改直接回车):" NGINX_USER read -p "请输入nginx版本号(默认:${NGINX_DEFAULT_VERSION},不修改直接回车):" NGINX_VERSION read -p "是否需要输出运行结果(默认:${NGINX_DEFAULT_OUTPUT},不修改直接回车):" NGINX_OUTPUT # 预防用户空输入 if [[ -z ${NGINX_USER} ]] then NGINX_USER=$NGINX_DEFAULT_USER fi # 预防用户空输入 if [[ -z ${NGINX_VERSION} ]] then NGINX_VERSION=$NGINX_DEFAULT_VERSION fi # 预防用户空输入 if [[ -z ${NGINX_OUTPUT} ]] then NGINX_OUTPUT=$NGINX_DEFAULT_OUTPUT fi NGINX_DEFAULT_INSTALL_DIR="/server/nginx/$NGINX_VERSION" read -p "请输入nginx安装位置(默认:${NGINX_DEFAULT_INSTALL_DIR},不修改直接回车):" NGINX_INSTALL_DIR # 预防用户空输入 if [[ -z ${NGINX_INSTALL_DIR} ]] then NGINX_INSTALL_DIR=$NGINX_DEFAULT_INSTALL_DIR fi # 预防用户空输入 if [[ -z ${NGINX_SRC_DIR} ]] then NGINX_SRC_DIR=$NGINX_DEFAULT_SRC_DIR fi while [[ true ]]; do confirmInstallConfig read -p "是否确认配置并进行安装(yes):" NGINX_CONFIRM if [[ ${NGINX_CONFIRM} == "yes" ]] then break fi done echo "现在开始安装……" } confirmInstallConfig() { echo "---------------------------------- 安装配置确认 --------------------------------------------" echo "Nginx的使用用户为:${NGINX_USER}" echo "Nginx的版本号为:${NGINX_VERSION}" echo "Nginx的安装位置为:${NGINX_INSTALL_DIR}" echo "Nginx的源码包存放位置为:${NGINX_SRC_DIR}" echo "Nginx安装过程是否需要输出:${NGINX_OUTPUT}" } # 主安装程序 main() { # 进入Nginx源码包存放目录 cd $NGINX_SRC_DIR # 下载nginx源码包 wget https://nginx.org/download/nginx-$NGINX_VERSION.tar.gz if [ $? -ne 0 ]; then echo "【错误】下载nginx源代码包出错" exit 1 fi # 解压源码包 tar -xzvf nginx-$NGINX_VERSION.tar.gz if [ $? -ne 0 ]; then echo "【错误】提取nginx源包时出错" exit 1 fi # 进入解压后的目录 cd nginx-$NGINX_VERSION # 配置nginx ./configure \ --prefix=$NGINX_INSTALL_DIR \ --user=$NGINX_USER \ --group=$NGINX_USER \ --with-http_ssl_module \ --with-http_stub_status_module if [ $? -ne 0 ]; then echo "【错误】配置nginx出错" exit 1 fi # 编译和安装nginx make if [ $? -ne 0 ]; then echo "【错误】编译nginx时出错" exit 1 fi make install if [ $? -ne 0 ]; then echo "【错误】编译后安装nginx时出错" exit 1 fi # 开放端口给程序占用(允许非root用户也可以执行nginx的启动(需要root执行)) sudo setcap cap_net_bind_service=+eip $NGINX_INSTALL_DIR/sbin/nginx # 使用命令来启动nginx $NGINX_INSTALL_DIR/sbin/nginx # 检查nginx是否监听80端口 sudo netstat -nltp | grep :80 if [ $? -ne 0 ]; then echo "【错误】Nginx没有监听80端口。" else echo "Nginx正在80端口上运行和侦听" fi $NGINX_INSTALL_DIR/sbin/nginx -v } preInstall() { # 检查nginx是否监听80端口 sudo ps -aux | grep 'nginx: worker process' | grep -v grep if [ $? -eq 0 ]; then echo "【错误】当前Nginx已经安装上了,无需重复安装" exit 1 fi # 安装依赖项 sudo yum install -y zlib-devel openssl-devel pcre pcre-devel if [ $? -ne 0 ]; then echo "【错误】安装依赖项错误" exit 1 fi # 添加nginx用户(如果尚未存在) id $NGINX_USER if [ $? -ne 0 ]; then sudo useradd $NGINX_USER -s /sbin/nologin -M fi # 创建源码包存放目录、安装目录 sudo mkdir -p $NGINX_SRC_DIR $NGINX_INSTALL_DIR sudo chown -R $USER.$USER $NGINX_SRC_DIR sudo chown -R $USER.$USER $NGINX_INSTALL_DIR } # 用户输入自定义配置 readUserInputConfig # 调用函数执行 if [[ $NGINX_OUTPUT ]]; then # 预安装 preInstall # 安装 main else # 预安装 preInstall > /dev/null 2>&1 # 安装 main > /dev/null 2>&1 fi

欢迎关注拓行公众号,分享各种技术博客文章

拓行——奋勇进取,开拓未来,砥砺前行

最后修改:2024 年 06 月 14 日
如果您对各种技术博客文章感兴趣,欢迎关注拓行公众号,分享各种专业技术知识~