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

相关推荐
SelectDB16 小时前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220703 天前
如何搭建本地yum源(上)
运维
ping某4 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树886 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠6 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质6 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工6 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智6 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_6 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化