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

相关推荐
文静小土豆20 小时前
Rocky Linux 二进制 安装K8S-1.35.0高可用集群
linux·运维·kubernetes
小技工丨21 小时前
华为TaiShan 200 2280 ARM服务器虚拟化部署完整指南
运维·服务器·arm开发
403240731 天前
[Jetson/Ubuntu 22.04] 解决挂载 exFAT 硬盘报错 “unknown filesystem type“ 及只读权限问题的终极指南
linux·运维·ubuntu
零意@1 天前
debian如何把新编译的内核镜像替换原来的内核
运维·debian·更新内核版本·linux内核版本更新·debian更新内核
Love丶伊卡洛斯1 天前
Ubuntu 部署 STUN服务端
linux·运维·ubuntu
DN金猿1 天前
使用ubuntu安装nginx时报错
linux·nginx·ubuntu
有毒的教程1 天前
SaltStack 开源自动化运维工具详细介绍
运维·开源·saltstack
大房身镇、王师傅1 天前
【VirtualBox】VirtualBox 7.1.6 RockyLinux10 配置增强功能 设置共享目录
运维·服务器·virtualbox·rockylinux10
betazhou1 天前
rsync使用案例分析
linux·运维·服务器·rsync·同步数据
minglie11 天前
谷歌浏览器搜索技巧
运维