包管理器安装适用于95%场景,Ubuntu/Debian用apt、CentOS/RHEL需先启用EPEL源;源码编译仅在需定制模块或旧系统无包时采用,须装全依赖并注意配置路径与权限。

直接装包管理器版本,95% 的场景够用;源码编译只在需要特定模块或旧系统无包可用时才必要。
Ubuntu/Debian 用 apt 安装最省事
系统自带源里的 nginx 版本稳定、自动注册 systemd 服务、配置路径统一,适合快速上线或测试环境。
- 执行
sudo apt update && sudo apt install nginx -y即可完成安装 - 主配置文件固定在
/etc/nginx/nginx.conf,站点配置默认放在/etc/nginx/sites-enabled/ - 启动后默认监听
:80,但 Ubuntu 默认会启用ufw防火墙,得手动放行:sudo ufw allow 'Nginx Full' - 若遇到
Failed to start nginx.service: Unit nginx.service not found,说明安装不完整,重装并确认没跳过-y
CentOS/RHEL 8+ 必须先开 EPEL 源
官方 base 源不提供 nginx,直接 yum install nginx 会报错“没有可用软件包”。EPEL 是红帽系标配扩展源,不是第三方风险源。
- 运行
sudo dnf install epel-release -y(RHEL 8+/CentOS 8+)或sudo yum install epel-release -y(CentOS 7) - 再执行
sudo dnf install nginx -y或sudo yum install nginx -y - 配置文件路径与 Ubuntu 一致,但
systemctl status nginx显示的Loaded行会明确标出 unit 文件来自epel - CentOS 7 默认启用
firewalld,需执行sudo firewall-cmd --permanent --add-service=http+sudo firewall-cmd --reload
源码编译前必须装齐四个依赖
缺任何一个都会在 ./configure 阶段失败,错误信息模糊(比如报 “no acceptable C compiler” 其实是缺 gcc,不是真没装编译器)。
- 一次性装全:
sudo yum install -y gcc pcre-devel zlib-devel openssl-devel(CentOS/RHEL)或sudo apt install -y build-essential libpcre3-dev zlib1g-dev libssl-dev(Ubuntu/Debian) -
pcre-devel和libpcre3-dev是关键:没它,rewrite规则、location ~ \.php$这类正则匹配直接失效 - 下载源码后,进解压目录执行
./configure --prefix=/usr/local/nginx;加--with-http_ssl_module才能用 HTTPS,否则listen 443 ssl会报unknown directive "ssl" - 编译完别忘了
sudo make install,此时二进制在/usr/local/nginx/sbin/nginx,不是PATH默认路径,启动得写全路径或加软链
启动失败常见原因就三个
别一上来就查日志,先看这三处:端口冲突、权限不足、配置语法错。90% 的 nginx: [emerg] 错误都落在这儿。
- 执行
sudo ss -tuln | grep ':80'确认 80 端口没被 Apache、另一个 nginx 或 Docker 占用;改端口在server { listen 8080; }里调 - 若提示
open() "/usr/local/nginx/logs/nginx.pid" failed (13: Permission denied),说明运行用户没权限写 logs 目录,用sudo chown -R $USER:$USER /usr/local/nginx修复 - 修改配置后务必先验证:
sudo nginx -t -c /etc/nginx/nginx.conf(包管理器版)或/usr/local/nginx/sbin/nginx -t(源码版),nginx: configuration file ... test is successful才能 reload
真正麻烦的是 HTTPS 证书路径配错、反向代理里 proxy_pass 少了结尾斜杠、或者 worker_processes 设太高导致 ulimit 不足——这些不会让 nginx 启不来,但会让请求静默失败,排查时容易绕远路。

















