Nginx 快速入门
1. Nginx 简介#
在现代 Web 架构中,Nginx 往往是流量到达服务器的第一道门面。它兼具极高的吞吐能力与轻量资源消耗,常用于静态站点分发与后端服务网关接入。
1.1 什么是 Nginx#
Nginx 是一款开源、高性能的 HTTP 服务器与反向代理服务器,核心架构基于单 Master 多 Worker 的异步非阻塞事件驱动模型(Linux 环境下使用 epoll)。
其核心能力:
- 静态资源直出:高效托管 HTML、CSS、JS 及各类多媒体文件,直接经由内核零拷贝响应,释放后端算力。
- 反向代理与流量分发:作为内部集群的前置入口,对外暴露统一端口,无感转发后端请求。
- 虚拟主机路由:支持基于单个端口配置多个域名(Server Name),实现单机多站点的精细隔离。
- 平滑热升级:内置优秀的信号处理机制,修改配置与更新二进制无需停机,实现零感知运维。
2. Nginx 安装与启动#
2.1 包管理器安装#
(1) 系统包管理器(推荐日常使用)
Ubuntu / Debian:
1sudo apt update
2sudo apt install -y nginx
CentOS / RHEL:
1sudo yum install -y epel-release
2sudo yum install -y nginx
macOS:
1brew install nginx
(2) 前端/Node.js 包管理器(npm)
适合前端本地快速模拟生产路由与接口代理,无需安装系统级服务:
1npm install -g nginx
2.2 从源码安装(可自定义模块)#
(1) 下载与解压源码:
1wget http://nginx.org/download/nginx-1.24.0.tar.gz
2tar -xvzf nginx-1.24.0.tar.gz
3cd nginx-1.24.0
(2) 配置与编译安装:
1./configure
2make
3sudo make install
2.3 启动与停止服务#
| 操作 | 命令 |
|---|---|
| 启动服务 | sudo systemctl start nginx |
| 停止服务 | sudo systemctl stop nginx |
| 重启服务 | sudo systemctl restart nginx |
| 检查状态 | sudo systemctl status nginx |
3. 基本命令#
| 命令 | 描述 |
|---|---|
| nginx -v | 查看已安装版本 |
| nginx -V | 查看版本及详细编译参数模块 |
| nginx -t | 检验配置文件语法与合法性 |
| nginx -s reload | 平滑热重载配置(不中断当前连接) |
| nginx -s stop | 快速强制终止进程 |
| nginx -s quit | 优雅退出(等待请求处理完成) |
| nginx -s reopen | 重新打开日志(配合日志轮转切割) |
4. 配置文件结构与解析#
4.1 配置文件路径#
- 主配置文件:/etc/nginx/nginx.conf(源码编译版通常位于 /usr/local/nginx/conf/nginx.conf)
- 模块化子配置:/etc/nginx/conf.d/*.conf
- 默认工作目录:/usr/share/nginx/html
4.2 配置文件结构#
Nginx 配置按作用域分层嵌套生效:
| 配置块 | 作用域与核心职责 |
|---|---|
| main | 全局顶层配置,控制运行用户、Worker 进程数、系统日志等。 |
| events | 网络连接模型控制,配置单个 Worker 的最大连接数及 epoll。 |
| http | HTTP 协议核心层,承载 MIME 类型、连接超时、Gzip 及虚拟主机。 |
| server | 虚拟主机单元,声明绑定的监听端口与域名。 |
| location | 路由规则分发,定义 URI 路径的具体匹配与响应行为。 |
4.3 配置文件基础示例#
默认配置文件路径:/etc/nginx/nginx.conf
1user nginx; # 运行 Worker 进程的系统用户
2worker_processes auto; # 自动根据 CPU 核心数分配 Worker 进程数
3
4events {
5 worker_connections 1024; # 单个 Worker 进程支持的最大并发连接数
6}
7
8http {
9 include /etc/nginx/mime.types; # 引入 MIME 类型映射文件
10 default_type application/octet-stream; # 默认响应类型
11 sendfile on; # 开启高效文件零拷贝传输机制
12 keepalive_timeout 65; # 长连接超时时间(秒)
13
14 include /etc/nginx/conf.d/*.conf; # 加载 conf.d 目录下的所有模块化子配置
15
16 server {
17 listen 80; # 监听 HTTP 默认 80 端口
18 server_name localhost; # 绑定的域名或主机名
19
20 location / {
21 root /usr/share/nginx/html; # 站点静态资源根目录
22 index index.html index.htm; # 默认首页文件名
23 }
24 }
25}
5. 常见实战应用#
在前后端分离架构中,Nginx 最典型的职责组合是:对外托管前端页面,对内反向代理后端接口。
5.1 反向代理#
目标:将所有发往 /api/ 的接口请求,无感转发给后端的业务服务(如 Spring Boot 的 8080 端口),并保留真实的客户端来源信息。
1server {
2 listen 80;
3 server_name localhost;
4
5 location /api/ {
6 proxy_pass http://127.0.0.1:8080/; # 转发至后端内网端口
7 proxy_set_header Host $host; # 透传客户端原始请求域名
8 proxy_set_header X-Real-IP $remote_addr; # 透传客户端直连 IP
9 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
10 }
11}
核心说明:
- proxy_pass 尾部斜杠差异:
- 带 /(如 http://127.0.0.1:8080/):Nginx 会去除匹配到的 /api/ 前缀再转发。
- 不带 /(如 http://127.0.0.1:8080):完整保留 /api/… 原路径转发。
- 透传请求头必要性:反向代理重新发起了 TCP 握手,后端默认只能拿到 Nginx 的本地 IP(127.0.0.1)。必须显式配置 proxy_set_header,后端的业务审计、地理位置解析和限流防刷才能拿到真实 IP。
5.2 监听 HTTP 端口#
目标:对外开放 HTTP 访问端口,并根据请求携带的 Host 域名将流量路由到对应的站点虚拟主机。
1server {
2 listen 80; # Nginx 监听 80 端口,浏览器直接访问 http://localhost 即可命中
3 server_name localhost; # 请求的 Host 满足匹配条件时进入该 server 处理
4
5 location / {
6 root /usr/share/nginx/html;
7 index index.html;
8 }
9}
核心说明:
- listen:指定该虚拟主机绑定的网络端口(如 80、443)或指定网卡 IP(如 127.0.0.1:8080)。
- server_name:虚拟主机的域名标识。当单台机器上运行多个站点时,Nginx 会依据 HTTP 请求头中的 Host 字段与 server_name 进行匹配并分发;未匹配上的请求会默认由排在首位或带有 default_server 标记的配置处理。
5.3 静态资源托管#
目标:履行 Web 服务器核心职责,直接从本地目录读取并返回网页静态资源;同时利用 try_files 保障单页应用(Vue / React SPA)在前端路由模式下刷新页面不报 404。
1server {
2 listen 80;
3 server_name localhost;
4
5 location / {
6 root /usr/share/nginx/html; # 指定前端构建产物所在的本地目录
7 index index.html; # 默认首页入口
8 try_files $uri $uri/ /index.html; # Vue/React 路由刷新防 404 兜底
9 }
10}
核心说明:
- Web 服务器核心职责:负责监听 HTTP 端口,接收浏览器请求并直接经由内核零拷贝响应网页静态内容。
- root 根路径:指定静态资源的物理根目录,请求 URI 路径会被完整拼接到 root 目录后进行文件检索。
- try_files 运行逻辑:按请求路径执行链路兜底检索:真实静态文件 ($uri) → 同名目录 ($uri/) → 兜底重定向返回 /index.html(交由前端单页路由引擎渲染,彻底杜绝 404)。
6. 总结与延伸#
Nginx 凭借单 Master 多 Worker 的事件驱动架构,在现代 Web 体系中牢牢占据着第一道流量关卡的位置。
这份基础入门配置看似简单,却覆盖了前后端分离架构中最核心的骨架场景:
- 静态层:通过文件零拷贝高效直出,利用 try_files 为单页应用提供路由兜底;
- 代理层:屏蔽内部真实架构细节,无感将 /api 等接口流量分发到后端微服务集群;
- 运维层:依托信号驱动机制,让每一次 nginx -s reload 都能平滑热更新,保证线上服务永续运行。
延伸阅读:
掌握了基础的代理与托管后,在真实的公网运营中往往还需要考虑静态资产的带宽保护。如果你正在面临资源盗刷问题,可以继续参阅进阶篇:《Nginx配置防盗链》。