包管理器安装最稳妥,95%场景应首选;ubuntu/debian用sudo apt update && sudo apt install nginx -y,centos/rhel 7用sudo yum install epel-release nginx -y,8+用sudo dnf install epel-release nginx -y,装完需验证版本和systemctl状态。

直接用包管理器安装最稳妥,95% 的生产环境和开发测试都该选这条路;源码编译只在需要自定义模块、绕过旧仓库版本限制,或必须指定运行用户时才值得投入时间。
包管理器安装:Ubuntu/Debian 和 CentOS/RHEL 用法不同但结果一致
系统自动处理依赖、配置文件预置合理、服务单元已就位,装完就能 systemctl start nginx。关键区别只在命令写法:
- Ubuntu/Debian:
sudo apt update && sudo apt install nginx -y - CentOS/RHEL 8+:
sudo dnf install epel-release nginx -y - CentOS/RHEL 7:
sudo yum install epel-release nginx -y
装完立刻验证:nginx -v 看版本,sudo systemctl status nginx 看状态是否为 active (running)。别跳过这步——有些镜像(比如最小化安装的 CentOS)装完默认不启动。
源码编译安装:configure 参数漏掉 --user 就可能跑成 root 进程
编译安装不是“更高级”,而是“更可控”。但容易因参数疏忽埋下隐患,比如默认以 root 身份运行 worker 进程。必须显式指定非特权用户:
- 先创建用户:
sudo useradd -r -s /sbin/nologin nginx - configure 时强制绑定:
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module - 漏掉
--user或--group,make install后ps aux | grep nginx会看到 master 是 root,worker 也是 root - 启动要用绝对路径:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf,否则可能读错配置
编译前务必装齐依赖:gcc、pcre-devel、zlib-devel、openssl-devel,缺一个 ./configure 就报错退出,不会提示缺哪个。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
启动失败常见卡点:端口被占、防火墙拦、配置语法错
执行 sudo systemctl start nginx 后状态显示 failed,别急着重装,按顺序查这三项:
- 端口冲突:
sudo ss -tuln | grep :80看 80 端口是否已被apache2或其他nginx实例占用 - 防火墙拦截:
sudo firewall-cmd --list-all(CentOS/RHEL)或sudo ufw status(Ubuntu),没放行 80/tcp 就访问不了 - 配置错误:
sudo nginx -t必须返回syntax is ok和test is successful;若提示某行出错,注意include的子配置文件路径是否真实存在
改完配置别用 start,用 sudo nginx -s reload(二进制方式)或 sudo systemctl reload nginx(systemd 方式),避免重复加载导致端口 bind 失败。
启动后 curl 不通?先确认监听地址是不是 127.0.0.1
包管理器安装的默认配置里,listen 指令常写成 listen 80 localhost 或 listen 127.0.0.1:80,这意味着只响应本地请求。远程浏览器访问服务器 IP 会超时。
解决方法很简单:编辑 /etc/nginx/sites-enabled/default(Ubuntu)或 /etc/nginx/nginx.conf(RHEL),把 listen 改成:
listen 80; # 或明确写 listen [::]:80; listen 0.0.0.0:80;
改完一定 sudo nginx -t 校验再 reload。这个细节极容易被忽略,尤其当你在云服务器上部署却只在本机 curl localhost 验证成功时。










