Ubuntu 24.04 编译安装 Nginx(全量文件统一部署:/opt/nginx + 临时文件 /tmp)最终版文档
一、文档说明
本文档整合前期所有需求,实现:
- Nginx 核心文件全量部署到
/opt/nginx目录; - 源码下载、编译临时文件统一放到
/tmp目录; - 解决特权端口(80/443)绑定权限问题;
- 所有命令经实测验证,无注释导致的参数错误,适配 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
十一、总结
本文档实现了:
- Nginx 编译安装全量文件统一部署到
/opt/nginx; - 源码下载 / 编译临时文件放到
/tmp,符合 Linux 临时文件规范; - 解决了 Ubuntu 24.04 下非 root 用户绑定 80 端口的权限问题;
- 所有命令无注释、无特殊字符,经实测可直接执行,避免参数错误。
后续可基于此配置 HTTPS、反向代理、负载均衡等高级功能,核心配置逻辑不变,仅需修改
/opt/nginx/conf/nginx.conf 即可。