当前位置: 首页 > article >正文

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


http://www.kler.cn/news/364891.html

相关文章:

  • 毕业设计—基于 Inception-ResNet模型的皮肤癌分类系统实现
  • python multiprocessing lock锁在相同父进程ID起作用
  • 【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (四):状态码的使用
  • Unity 实现音频(mp3)可控制进度条
  • 【传知代码】智能推荐与隐私保护的融合(论文复现)
  • 【多线程】CompletableFuture使用详解
  • js和vue巩固指引
  • 【Linq】在C#中从SQL query case语句发布到linq扩展方法
  • 61 mysql 存储引擎之动态格式 MyISAM
  • react18中的计算属性及useMemo的性能优化技巧
  • 如何利用 KPaaS 低代码及 CI/CD 优化企业业务集成与流程
  • 企业架构与业务流程管理之间的关系
  • 国产数据库的蓝海在哪?
  • 手动将python的flask程序打包成exe在windows上执行
  • Zabbix企业级分布式监控环境部署
  • Solidworks 选项卡不显示草图、焊件等选项
  • Docker 搭建mysql
  • 15.6 JDBC数据库编程6——可滚动和可更新的ResultSet
  • FFMPEG录屏(20)--- 枚举macOS下的窗口和屏幕列表,并获取名称缩略图等信息
  • OpenCV系列教程六:信用卡数字识别、人脸检测、车牌/答题卡识别、OCR
  • 利用飞腾派进行OpenCV开发
  • 【C++修炼】初识C++:命名空间、缺省参数、函数重载、引用、内联函数、指针空值
  • java编译[WARNING]告警处理
  • OpenCV KeyPoint与描述子编解码
  • 搭建你的第一个Spring Cloud Alibaba微服务
  • Java | Leetcode Java题解之第492题构造矩形