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