Nginx 教程:从入门到能上线

Nginx 是一款高性能 Web 服务器,也常被用作反向代理、负载均衡器、静态资源服务器和 HTTPS 网关。它的特点是占用资源少、并发能力强、配置清晰,非常适合部署网站、API 服务和前端项目。

一、安装 Nginx

在 Ubuntu / Debian 上:

bash 复制代码
sudo apt update
sudo apt install nginx

在 CentOS / Rocky Linux 上:

bash 复制代码
sudo dnf install nginx

在 macOS 上:

bash 复制代码
brew install nginx

启动并查看状态:

bash 复制代码
sudo systemctl start nginx
sudo systemctl status nginx

设置开机自启:

bash 复制代码
sudo systemctl enable nginx

浏览器访问服务器 IP,如果看到 Nginx 欢迎页,说明安装成功。

二、常用目录

不同系统路径略有差异,Linux 上常见结构如下:

text 复制代码
/etc/nginx/nginx.conf              # 主配置文件
/etc/nginx/conf.d/                 # 子配置目录
/etc/nginx/sites-available/        # 可用站点配置,部分系统有
/etc/nginx/sites-enabled/          # 已启用站点配置,部分系统有
/var/www/html/                     # 默认静态资源目录
/var/log/nginx/access.log          # 访问日志
/var/log/nginx/error.log           # 错误日志

修改配置后,先检查语法:

bash 复制代码
sudo nginx -t

确认无误后重载配置:

bash 复制代码
sudo systemctl reload nginx

三、核心配置结构

Nginx 配置大致分为几层:

nginx 复制代码
events {
    worker_connections 1024;
}

http {
    server {
        listen 80;
        server_name example.com;

        location / {
            root /var/www/html;
            index index.html;
        }
    }
}

常见含义:

text 复制代码
events:连接相关配置
http:HTTP 服务配置
server:一个虚拟主机
location:匹配请求路径
listen:监听端口
server_name:域名
root:静态文件目录
index:默认首页文件

四、部署静态网站

假设你的前端构建产物在:

text 复制代码
/var/www/example

配置 Nginx:

nginx 复制代码
server {
    listen 80;
    server_name example.com;

    root /var/www/example;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }
}

try_files 对单页应用很重要,比如 Vue、React、Angular。它可以让 /user/1 这种前端路由也正确返回 index.html

五、反向代理后端服务

假设后端服务运行在本机 3000 端口:

nginx 复制代码
server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

这样用户访问:

text 复制代码
http://api.example.com

实际请求会被 Nginx 转发到:

text 复制代码
http://127.0.0.1:3000

六、配置 HTTPS

推荐使用 Certbot 自动申请 Let's Encrypt 证书。

安装:

bash 复制代码
sudo apt install certbot python3-certbot-nginx

申请证书:

bash 复制代码
sudo certbot --nginx -d example.com -d www.example.com

Certbot 会自动修改 Nginx 配置,并添加 HTTPS 相关规则。

检查自动续期:

bash 复制代码
sudo certbot renew --dry-run

七、负载均衡

Nginx 可以把请求分发到多个后端服务:

nginx 复制代码
upstream backend {
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
    server 127.0.0.1:3003;
}

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://backend;
    }
}

默认是轮询策略,也就是请求依次分发到不同服务器。

八、常用命令

bash 复制代码
sudo nginx -t                    # 检查配置
sudo systemctl start nginx        # 启动
sudo systemctl stop nginx         # 停止
sudo systemctl restart nginx      # 重启
sudo systemctl reload nginx       # 平滑重载
sudo tail -f /var/log/nginx/error.log   # 查看错误日志

九、常见问题

如果页面打不开,优先检查:

bash 复制代码
sudo nginx -t
sudo systemctl status nginx
sudo tail -f /var/log/nginx/error.log

如果返回 403 Forbidden,通常是目录权限或缺少首页文件。

如果返回 502 Bad Gateway,通常是后端服务没有启动,或者 proxy_pass 地址写错。

如果配置修改后不生效,确认是否执行了:

bash 复制代码
sudo systemctl reload nginx

十、总结

Nginx 最常用的三种场景是:

text 复制代码
静态网站部署
反向代理后端服务
HTTPS 入口网关

掌握 serverlocationroottry_filesproxy_pass 这几个核心配置后,就已经能完成大多数实际部署工作。真正上线时,再配合日志、HTTPS、限流、缓存和负载均衡,就可以搭建稳定可靠的 Web 服务入口。

相关推荐
乘云数字DATABUFF4 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--6 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森6 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜7 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB8 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode9 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户03284722207010 天前
如何搭建本地yum源(上)
运维
ping某11 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树8813 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠13 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql