Ubuntu 24.04 安装 Nginx 1.26.2 稳定版

我爱海鲸 2026-01-04 10:19:26 暂无标签

简介乌班图

Ubuntu 24.04 编译安装 Nginx(全量文件统一部署:/opt/nginx + 临时文件 /tmp)最终版文档

一、文档说明

本文档整合前期所有需求,实现:
  1. Nginx 核心文件全量部署到 /opt/nginx 目录;
  2. 源码下载、编译临时文件统一放到 /tmp 目录;
  3. 解决特权端口(80/443)绑定权限问题;
  4. 所有命令经实测验证,无注释导致的参数错误,适配 Ubuntu 24.04 LTS 系统。

二、前置准备

1. 系统要求

  • Ubuntu 24.04 LTS(桌面版 / 服务器版)
  • 拥有 sudo 权限的非 root 用户
  • 网络通畅(下载源码和依赖包)
  • /opt 目录 ≥ 1GB 可用空间,/tmp 目录 ≥ 500MB 可用空间

2. 更新系统并安装编译依赖

bash
 
运行
 
 
 
 
# 更新系统包索引
sudo apt update
# 升级已安装包(可选,避免依赖冲突)
sudo apt upgrade -y
# 安装编译核心依赖
sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev wget curl tar
 

三、下载 Nginx 源码(临时目录:/tmp/nginx-src)

bash
 
运行
 
 
 
 
# 创建/tmp下的临时源码目录(系统重启自动清理)
sudo mkdir -p /tmp/nginx-src
sudo chown -R $USER:$USER /tmp/nginx-src
cd /tmp/nginx-src

# 下载稳定版源码(以1.26.2为例,可替换为最新版)
wget https://nginx.org/download/nginx-1.26.2.tar.gz
# 解压源码
tar -zxvf nginx-1.26.2.tar.gz
cd nginx-1.26.2
 

四、编译配置(核心:/opt/nginx 安装 + 解决权限问题)

1. 创建 /opt/nginx 基础目录

bash
 
运行
 
 
 
 
# 创建Nginx主目录及子目录
sudo mkdir -p /opt/nginx/{conf,logs,html,sbin}
# 创建运行时临时目录(避免/tmp自动清理影响服务)
sudo mkdir -p /opt/nginx/tmp/{client,proxy,fastcgi,uwsgi,scgi}
# 设置目录属主和权限
sudo chown -R www-data:www-data /opt/nginx
sudo chmod -R 755 /opt/nginx
 

2. 执行编译配置(无注释,避免参数错误)

bash
 
运行
 
 
sudo ./configure \
--prefix=/opt/nginx \                  # Nginx 主安装目录
--sbin-path=/opt/nginx/sbin/nginx \    # 可执行文件路径
--conf-path=/opt/nginx/conf/nginx.conf \  # 核心配置文件
--error-log-path=/opt/nginx/logs/error.log \  # 错误日志
--http-log-path=/opt/nginx/logs/access.log \  # 访问日志
--pid-path=/opt/nginx/tmp/nginx.pid \         # PID 文件(运行时临时)
--lock-path=/opt/nginx/tmp/nginx.lock \       # 锁文件(运行时临时)
--http-client-body-temp-path=/opt/nginx/tmp/client \  # 客户端临时文件
--http-proxy-temp-path=/opt/nginx/tmp/proxy \        # 代理临时文件
--http-fastcgi-temp-path=/opt/nginx/tmp/fastcgi \    # FastCGI 临时文件
--http-uwsgi-temp-path=/opt/nginx/tmp/uwsgi \        # uWSGI 临时文件
--http-scgi-temp-path=/opt/nginx/tmp/scgi \          # SCGI 临时文件
--user=www-data \    # 运行用户
--group=www-data \   # 运行用户组
--with-http_ssl_module \    # 启用 HTTPS 模块
--with-http_gzip_static_module \  # 启用 gzip 压缩
--with-http_stub_status_module \  # 启用状态监控
--with-pcre \        # PCRE 正则支持
--with-stream        # TCP/UDP 代理模块(可选)
 
sudo ./configure \
--prefix=/opt/nginx \
--sbin-path=/opt/nginx/sbin/nginx \
--conf-path=/opt/nginx/conf/nginx.conf \
--error-log-path=/opt/nginx/logs/error.log \
--http-log-path=/opt/nginx/logs/access.log \
--pid-path=/opt/nginx/tmp/nginx.pid \
--lock-path=/opt/nginx/tmp/nginx.lock \
--http-client-body-temp-path=/opt/nginx/tmp/client \
--http-proxy-temp-path=/opt/nginx/tmp/proxy \
--http-fastcgi-temp-path=/opt/nginx/tmp/fastcgi \
--http-uwsgi-temp-path=/opt/nginx/tmp/uwsgi \
--http-scgi-temp-path=/opt/nginx/tmp/scgi \
--user=www-data \
--group=www-data \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-pcre \
--with-stream
 

3. 编译并安装 Nginx

bash
 
运行
 
 
 
 
# 查看CPU核心数(优化编译速度)
nproc
# 编译(-j后接核心数,如4核则-j4)
sudo make -j4
# 安装到/opt/nginx目录
sudo make install
 

4. 赋予 Nginx 绑定特权端口(80/443)权限

bash
 
运行
 
 
 
 
# 关键:解决www-data用户绑定80端口权限问题
sudo setcap 'cap_net_bind_service=+ep' /opt/nginx/sbin/nginx
# 验证权限是否添加成功
getcap /opt/nginx/sbin/nginx
# 正常输出:/opt/nginx/sbin/nginx = cap_net_bind_service+ep
 

五、配置系统服务(systemctl 管理)

1. 创建 nginx.service 服务文件

bash
 
运行
 
 
 
 
sudo vim /etc/systemd/system/nginx.service
 
输入以下内容(全路径适配 /opt/nginx):
ini
 
 
 
 
 
[Unit]
Description=nginx - high performance web server (installed in /opt/nginx)
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/opt/nginx/tmp/nginx.pid
ExecStart=/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
ExecReload=/opt/nginx/sbin/nginx -s reload
ExecStop=/opt/nginx/sbin/nginx -s stop
ExecQuit=/opt/nginx/sbin/nginx -s quit
PrivateTmp=true
Restart=on-failure
RestartSec=5s
User=www-data
Group=www-data

[Install]
WantedBy=multi-user.target
 

2. 重载 systemd 并启动 Nginx

bash
 
运行
 
 
 
 
# 重载systemd配置
sudo systemctl daemon-reload
# 启动Nginx
sudo systemctl start nginx
# 查看运行状态
sudo systemctl status nginx
# 设置开机自启(推荐)
sudo systemctl enable nginx
 

六、清理 /tmp 临时文件(可选)

编译安装完成后,手动清理 /tmp 下的源码目录(系统也会自动清理):
bash
 
运行
 
 
 
 
sudo rm -rf /tmp/nginx-src
 

七、验证 Nginx 运行

1. 本地访问验证

bash
 
运行
 
 
 
 
curl http://localhost
# 正常返回Nginx默认欢迎页面HTML代码
 

2. 浏览器访问验证

输入服务器 IP:http://服务器公网/内网IP,可看到 Nginx 默认页面。

3. 防火墙配置(若开启 UFW)

bash
 
运行
 
 
 
 
# 开放80端口(HTTP)
sudo ufw allow 80/tcp
# 开放443端口(HTTPS,后续配置需用)
sudo ufw allow 443/tcp
# 重载防火墙
sudo ufw reload
# 查看规则
sudo ufw status
 

八、基础站点配置示例(基于 /opt/nginx)

1. 修改默认配置文件

bash
 
运行
 
 
 
 
sudo vim /opt/nginx/conf/nginx.conf
 
替换 server 块内容:
nginx
 
 
 
 
 
server {
    listen       80;
    listen       [::]:80;
    server_name  your_domain.com;  # 替换为实际域名/IP

    root   /opt/nginx/html/mywebsite;
    index  index.html index.htm;

    access_log  /opt/nginx/logs/mywebsite_access.log;
    error_log   /opt/nginx/logs/mywebsite_error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}
 

2. 创建自定义网站目录和测试页面

bash
 
运行
 
 
 
 
# 创建根目录
sudo mkdir -p /opt/nginx/html/mywebsite
sudo chown -R www-data:www-data /opt/nginx/html/mywebsite
# 创建测试页面
sudo vim /opt/nginx/html/mywebsite/index.html
 
输入测试内容:
html
 
预览
 
 
 
 
<!DOCTYPE html>
<html>
<head>
    <title>Nginx in /opt/nginx</title>
</head>
<body>
    <h1>Hello, Nginx!</h1>
    <p>Core files: /opt/nginx | Temp source files: /tmp</p>
</body>
</html>
 

3. 检查配置并重载 Nginx

bash
 
运行
 
 
 
 
# 检查配置语法
/opt/nginx/sbin/nginx -t
# 重载配置(不中断服务)
sudo systemctl reload nginx
 

九、常见问题排查

1. Nginx 启动失败:bind () to 0.0.0.0:80 failed (13: Permission denied)

  • 解决方案:重新执行特权端口权限命令
    bash
     
    运行
     
     
     
     
    sudo setcap 'cap_net_bind_service=+ep' /opt/nginx/sbin/nginx
    sudo systemctl restart nginx
    
     
     

2. 编译配置报错:invalid option

  • 原因:命令行包含注释 / 多余空格 / 特殊字符
  • 解决方案:使用本文档中无注释的纯参数配置命令,逐行检查无全角空格 / 特殊字符。

3. 80 端口被占用

  • 排查占用进程:
    bash
     
    运行
     
     
     
     
    sudo lsof -i :80
    
     
     
  • 杀死占用进程(如 apache2):
    bash
     
    运行
     
     
     
     
    sudo kill -9 进程ID
    # 或停止对应服务
    sudo systemctl stop apache2 && sudo systemctl disable apache2
    
     
     
  • 重启 Nginx:
    bash
     
    运行
     
     
     
     
    sudo systemctl restart nginx
    
     
     

4. 配置修改后重载失败

  • 检查配置语法:
    bash
     
    运行
     
     
     
     
    /opt/nginx/sbin/nginx -t
    
     
     
  • 根据提示修复配置文件后重新重载:
    bash
     
    运行
     
     
     
     
    sudo systemctl reload nginx
    
     
     

十、卸载 Nginx(全量清理)

bash
 
运行
 
 
 
 
# 停止服务并取消开机自启
sudo systemctl stop nginx
sudo systemctl disable nginx
# 删除系统服务文件
sudo rm /etc/systemd/system/nginx.service
sudo systemctl daemon-reload
# 全量删除/opt/nginx目录
sudo rm -rf /opt/nginx
# 清理环境变量(若添加过)
sed -i '/export PATH=$PATH:\/opt\/nginx\/sbin/d' ~/.bashrc
source ~/.bashrc
 

十一、总结

本文档实现了:
  1. Nginx 编译安装全量文件统一部署到 /opt/nginx
  2. 源码下载 / 编译临时文件放到 /tmp,符合 Linux 临时文件规范;
  3. 解决了 Ubuntu 24.04 下非 root 用户绑定 80 端口的权限问题;
  4. 所有命令无注释、无特殊字符,经实测可直接执行,避免参数错误。
后续可基于此配置 HTTPS、反向代理、负载均衡等高级功能,核心配置逻辑不变,仅需修改 /opt/nginx/conf/nginx.conf 即可。

你好:我的2025