主流linux发行版推荐用包管理器安装nginx:ubuntu/debian用apt,centos/rhel 8+用dnf;需手动启动并设开机自启,注意firewalld放行端口;配置修改应通过站点文件而非主配置,务必nginx -t校验;403多因权限或selinux,502常见于反向代理后端异常。

直接在主流 Linux 发行版上安装 Nginx,用包管理器最稳妥;手动编译反而容易因依赖或权限出错,新手不建议。
Ubuntu/Debian 上 apt 安装并验证服务状态
系统自带源通常已包含较新稳定版 nginx,无需添加第三方仓库。安装后默认不自动启动,必须手动启用。
- 运行
sudo apt update && sudo apt install nginx - 检查是否运行:
sudo systemctl status nginx—— 若显示inactive (dead),需执行sudo systemctl start nginx - 设为开机自启:
sudo systemctl enable nginx - 验证监听:浏览器访问
http://localhost或服务器 IP,应看到 “Welcome to nginx!” 页面
常见问题:Failed to start nginx.service: Unit nginx.service not found 通常是拼写错误(如输成 ngnix)或安装失败未报错,可重试安装并检查输出中是否有 Setting up nginx 字样。
CentOS/RHEL 8+ 使用 dnf 安装并处理 firewalld
CentOS 8+ 默认用 dnf 替代 yum,且 firewalld 默认拦截 80/443 端口,不配置就无法从外部访问。
- 安装:
sudo dnf install nginx - 启动并检查:
sudo systemctl start nginx && sudo systemctl status nginx - 放行 HTTP 流量:
sudo firewall-cmd --permanent --add-service=http,然后sudo firewall-cmd --reload - 若还需 HTTPS:
sudo firewall-cmd --permanent --add-service=https
注意:firewall-cmd 的 --permanent 参数不可省略,否则重启后规则丢失;不 reload 就不生效。
修改默认网站根目录与配置文件位置
Nginx 主配置文件固定为 /etc/nginx/nginx.conf,但站点配置通常拆分到 /etc/nginx/sites-enabled/(Debian/Ubuntu)或 /etc/nginx/conf.d/(RHEL/CentOS)。改根目录别直接动 nginx.conf,应新建或编辑站点配置。
- 例如,在
/etc/nginx/conf.d/myapp.conf中写:
server {
listen 80;
server_name example.com;
root /var/www/myapp;
index index.html;
}
- 确保目录存在且 Nginx 有读取权限:
sudo chown -R $USER:www-data /var/www/myapp(Ubuntu)或sudo chown -R $USER:nginx /var/www/myapp(CentOS) - 语法检查:
sudo nginx -t—— 必须通过才能重载:sudo systemctl reload nginx
错误现象:nginx: [emerg] open() "/var/www/myapp/index.html" failed (13: Permission denied) 多半是 SELinux(CentOS)或目录权限未放开,先关 SELinux 测试:sudo setenforce 0,确认是它再配策略。
日志路径与排查 403/502 错误的速查点
默认错误日志在 /var/log/nginx/error.log,访问日志在 /var/log/nginx/access.log。403 和 502 是配置后最常遇到的两类错误,原因高度集中。
-
403 Forbidden:检查root路径是否存在、Nginx 用户(www-data或nginx)是否有执行权限(目录需x)、SELinux 是否拦截(CentOS)、配置中是否漏了index指令 -
502 Bad Gateway:多见于反向代理场景,先确认后端服务(如localhost:3000)确实在运行,再检查proxy_pass地址是否写错、是否加了多余斜杠(http://127.0.0.1:3000/末尾/会影响路径拼接) - 改完配置务必
sudo nginx -t,别跳过;重载失败时systemctl status nginx会显示最近一条错误,比翻日志更快
真实运维中,error.log 的第一行错误往往就是根因,但很多人习惯从最后看——越往后的日志越可能是前一个错误引发的连锁反应。











