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 服务入口。

相关推荐
海鸥811 小时前
AIOps(智能运维)理解
运维·人工智能
码农小韩2 小时前
Linux应用开发(一)——Linux的标准IO
linux·运维·服务器
路弥行至2 小时前
Linux (ARM64 / Jetson) 挂载 exFAT 移动硬盘排障与离线安装指南
linux·运维·服务器·经验分享·笔记·jetson·exfat
漫谈数据智理2 小时前
主动元数据为何是数据编织的核心——从“连接数据”走向“感知、理解与行动”的 Data Fabric
运维·fabric
数据库小学妹2 小时前
MySQL长事务复盘:Sleep连接、MDL排队与undo滞留
运维·数据库·mysql
云泽8082 小时前
Linux 系统编程实战:从零手写一个高性能终端进度条
linux·运维·服务器
Lsetea3 小时前
ACME 报 rate limit:Let‘s Encrypt 限速类型与重试策略
运维·https·证书·ssl·acme
A黄俊辉A4 小时前
两分钟上手docker
运维·docker·容器
邪修king4 小时前
Re: Linux系统篇(十八):进程篇(七): 进程深度解析:从 fork 创建到退出的完整旅程(附写时拷贝原理 + 代码实战)
java·linux·运维
湫默5 小时前
运维八股文
运维