nginx安装详解含 自动化编译安装 Debian/Ubuntu/CentOS/RHEL/ROCKY

1. 准备工作

1.1 选择操作系统
  • 推荐操作系统:Ubuntu、CentOS、Debian等Linux发行版。
  • 系统要求:确保服务器有足够的CPU、内存和磁盘空间。
1.2 更新系统
  • 更新包列表

    复制代码
    sudo apt update  # 对于Debian/Ubuntu
    sudo yum update  # 对于CentOS/RHEL

    解释:更新系统包列表,确保安装最新版本的软件包。

2. 安装Nginx

2.1 使用包管理器安装
  • Debian/Ubuntu

    复制代码
    sudo apt install nginx

    解释 :使用apt包管理器安装Nginx。

  • CentOS/RHEL

    复制代码
    sudo yum install epel-release
    sudo yum install nginx

    解释 :首先安装EPEL仓库,然后使用yum包管理器安装Nginx。

2.2 从源码安装(生产首选)

直接放脚本,就不手动了,手动太low了

复制代码
#!/bin/bash

# 定义变量
NGINX_VERSION="1.26.2"  # Nginx版本号
INSTALL_PREFIX="/usr/local/nginx"  # Nginx安装路径
NGINX_USER="www"         # Nginx运行用户
NGINX_GROUP="www"        # Nginx运行组
TEMP_DIR="/tmp/nginx-install"  # 临时目录
SYSTEMD_SERVICE_FILE="/etc/systemd/system/nginx.service"  # systemd服务文件路径

# 函数:显示错误信息并退出
error_exit() {
    echo "Error: $1"
    exit 1
}

# 创建临时目录
mkdir -p $TEMP_DIR || error_exit "Failed to create temporary directory $TEMP_DIR"
cd $TEMP_DIR || error_exit "Failed to change directory to $TEMP_DIR"

# 检查并安装必要的依赖项
if [ -f /etc/redhat-release ] || [ -f /etc/rocky-release ]; then
    # CentOS/RHEL/Rocky
    sudo yum update -y || error_exit "Failed to update packages"
    sudo yum install -y gcc make pcre pcre-devel zlib zlib-devel openssl openssl-devel || error_exit "Failed to install dependencies"
elif [ -f /etc/debian_version ]; then
    # Debian/Ubuntu
    if sudo fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; then
        echo "Another process is using dpkg. Please wait or terminate the process."
        ps aux | grep `sudo lsof -t /var/lib/dpkg/lock-frontend`
        exit 1
    fi
    sudo apt-get update -y || error_exit "Failed to update package list"
    sudo apt-get install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev || error_exit "Failed to install dependencies"
else
    error_exit "Unsupported distribution."
fi

# 检查并创建 www 用户和组
if ! getent group $NGINX_GROUP > /dev/null; then
    sudo groupadd -r $NGINX_GROUP || error_exit "Failed to create group $NGINX_GROUP"
fi

if ! id -u $NGINX_USER > /dev/null 2>&1; then
    sudo useradd -s /sbin/nologin -r -g $NGINX_GROUP $NGINX_USER || error_exit "Failed to create user $NGINX_USER"
fi

# 下载 Nginx 源代码包
wget --no-check-certificate https://nginx.org/download/nginx-$NGINX_VERSION.tar.gz || error_exit "Failed to download Nginx source"

# 解压文件
tar -zxvf nginx-$NGINX_VERSION.tar.gz || error_exit "Failed to extract Nginx source"

# 进入Nginx源代码目录
cd nginx-$NGINX_VERSION || error_exit "Failed to change directory to nginx-$NGINX_VERSION"

# 配置Nginx
./configure --prefix=$INSTALL_PREFIX \
            --with-http_ssl_module \
            --with-http_v2_module \
            --with-http_gzip_static_module \
            --with-http_stub_status_module \
            --user=$NGINX_USER \
            --group=$NGINX_GROUP || error_exit "Failed to configure Nginx"

# 编译并安装
make || error_exit "Failed to compile Nginx"
sudo make install || error_exit "Failed to install Nginx"

# 检查安装是否成功
if [ -f $INSTALL_PREFIX/sbin/nginx ]; then
    echo "Nginx installed successfully!"
else
    error_exit "Nginx installation failed."
fi

# 生产环境优化
# 设置Nginx运行目录的所有者和组
sudo chown -R $NGINX_USER:$NGINX_GROUP $INSTALL_PREFIX || error_exit "Failed to set ownership for $INSTALL_PREFIX"

# 创建Nginx服务文件
cat <<EOF | sudo tee $SYSTEMD_SERVICE_FILE > /dev/null || error_exit "Failed to create systemd service file"
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=$INSTALL_PREFIX/logs/nginx.pid
ExecStartPre=$INSTALL_PREFIX/sbin/nginx -t
ExecStart=$INSTALL_PREFIX/sbin/nginx
ExecReload=$INSTALL_PREFIX/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT \$MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

# 重新加载systemd配置
sudo systemctl daemon-reload || error_exit "Failed to reload systemd configuration"

# 启动Nginx服务
sudo systemctl start nginx || error_exit "Failed to start Nginx service"

# 设置Nginx开机自启
sudo systemctl enable nginx || error_exit "Failed to enable Nginx service on boot"

# 创建符号链接
sudo ln -s $INSTALL_PREFIX/sbin/nginx /usr/local/bin/nginx

# 手动测试配置文件
nginx -t
if [ $? -ne 0 ]; then
    echo "Nginx configuration test failed. Check the error log for more details."
    sudo tail -n 20 $INSTALL_PREFIX/logs/error.log
    exit 1
else
    echo "Nginx configuration test passed."
fi

# 清理临时文件
rm -rf $TEMP_DIR || error_exit "Failed to clean up temporary files"

# 输出启动命令
echo "Nginx installed and configured successfully!"
echo "To manage Nginx, use the following commands:"
echo "  Start: sudo systemctl start nginx"
echo "  Stop: sudo systemctl stop nginx"
echo "  Restart: sudo systemctl restart nginx"
echo "  Status: sudo systemctl status nginx"

使用说明:

将上述脚本保存为文件,例如 install_nginx.sh。

给脚本执行权限:chmod +x install_nginx.sh。

执行脚本:./install_nginx.sh

相关推荐
艾伦_耶格宇1 小时前
【ACP】阿里云云计算高级运维工程师--ACP
运维·阿里云·云计算
一位摩羯座DBA2 小时前
Redhat&Centos挂载镜像
linux·运维·centos
charlee442 小时前
nginx部署发布Vite项目
nginx·性能优化·https·部署·vite
cui_win3 小时前
【网络】Linux 内核优化实战 - net.core.flow_limit_table_len
linux·运维·网络
风清再凯3 小时前
自动化工具ansible,以及playbook剧本
运维·自动化·ansible
深圳安锐科技有限公司3 小时前
深圳安锐科技发布国内首款4G 索力仪!让斜拉桥索力自动化监测更精准高效
运维·安全·自动化·自动化监测·人工监测·桥梁监测·索力监测
猫头虎3 小时前
猫头虎 AI工具分享:一个网页抓取、结构化数据提取、网页爬取、浏览器自动化操作工具:Hyperbrowser MCP
运维·人工智能·gpt·开源·自动化·文心一言·ai编程
CRMEB定制开发4 小时前
【实战】CRMEB Pro 企业版安装教程(附 Nginx 反向代理配置 + 常见问题解决)
nginx·商城系统·微信商城·crmeb
cocologin5 小时前
RIP 技术深度解析
运维·网络·网络协议
庸子5 小时前
基于Jenkins和Kubernetes构建DevOps自动化运维管理平台
运维·kubernetes·jenkins