引言
这里主要是一个一键编译安装 Nginx
的脚本
修订记录
序号 | 时间 | 修改内容 |
---|---|---|
1 | 2024.04.23 | 创建Nginx 的脚本安装文件 |
2 | 2024.04.24 | 补充用户配置修改部分 |
3 | 2024.04.25 | 补充Nginx 安装前检测 |
4 | 2024.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