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

相关推荐
oushaojun221 分钟前
ubuntu中使用ffmpeg和nginx推http hls视频流
nginx·ubuntu·ffmpeg·hls
爱写Bug的小孙23 分钟前
docker搭建私有的仓库
java·运维·spring boot·docker·容器
WZF-Sang23 分钟前
Linux—进程概念学习-03
linux·运维·服务器·c语言·开发语言·学习·vim
周雨濛26 分钟前
通过shell脚本分析部署nginx网络服务
linux·服务器·nginx
pcj_88843 分钟前
keepalived双机热备方案实现Nginx高可用
nginx·keepalived·ha
BIO系统2 小时前
ASUS/华硕灵耀14 UX3402ZA 原厂win11系统 工厂文件 带ASUS Recovery恢复
运维·5g·电脑·个人开发
✿ ༺ ོIT技术༻2 小时前
Linux:进程间通信之进程池和日志
linux·运维·服务器
慧都小妮子2 小时前
质量留住用户:如何通过测试自动化提供更高质量的用户体验
运维·软件测试·自动化·ux
Holen&&Beer2 小时前
【Linux】安装cuda
linux·运维·服务器
是阿建吖!2 小时前
【Linux】进程优先级
linux·运维·服务器