目录
[一、Nginx 简介](#一、Nginx 简介)
[安装(以 Ubuntu 为例)](#安装(以 Ubuntu 为例))
[1. 配置文件结构](#1. 配置文件结构)
[2. 关键指令说明](#2. 关键指令说明)
[3. location 匹配规则优先级](#3. location 匹配规则优先级)
[1、静态资源服务(Static File Serving)](#1、静态资源服务(Static File Serving))
[2、反向代理(Reverse Proxy)](#2、反向代理(Reverse Proxy))
[3、负载均衡(Load Balancing)](#3、负载均衡(Load Balancing))
[4、虚拟主机(Virtual Host / Server Block)](#4、虚拟主机(Virtual Host / Server Block))
[5、HTTPS 与 SSL 终止(SSL Termination)](#5、HTTPS 与 SSL 终止(SSL Termination))
[6、缓存与压缩(Caching and Compression)](#6、缓存与压缩(Caching and Compression))
一、Nginx 简介
Nginx(发音为 "engine-x")是一个高性能的 HTTP 服务器、反向代理服务器、负载均衡器 和 邮件代理服务器。由俄罗斯工程师 Igor Sysoev 于 2004 年发布,以其高并发、低内存消耗和模块化设计著称。
核心优势:
- 高并发处理能力(C10K 问题解决方案)
- 轻量级、资源占用少
- 模块化架构,易于扩展
- 支持热部署(不停机更新配置)
- 反向代理 & 负载均衡能力强
- 静态文件服务性能优异
生活示例:
可以把 Nginx 想象成一个大型商场的总服务台。顾客(用户)进来后,不会直接冲进各个店铺(后端服务),而是先到服务台问:"我想买衣服""我要找客服中心"。服务台(Nginx)会根据需求,快速指引或代为联系对应部门。它不卖货,但让整个商场运转高效有序。
二、安装与基本操作
安装(以 Ubuntu 为例)
sudo apt update
sudo apt install nginx
常用命令
| 命令 | 说明 |
|---|---|
nginx -v |
查看版本 |
nginx -t |
测试配置文件语法 |
nginx -s reload |
重载配置(热更新) |
nginx -s stop |
快速停止 |
systemctl start nginx |
启动服务 |
systemctl status nginx |
查看状态 |
主要目录结构
/etc/nginx/ # 配置文件目录
├── nginx.conf # 主配置文件
├── sites-available/ # 可用站点配置
├── sites-enabled/ # 已启用站点(软链接)
/var/log/nginx/ # 日志目录(access.log, error.log)
/usr/share/nginx/html/ # 默认静态文件目录
三、核心配置详解
1. 配置文件结构
# 全局块
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# events 块
events {
worker_connections 1024;
}
# http 块(最常用)
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Server 块(虚拟主机)
server {
listen 80;
server_name example.com;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
}
2. 关键指令说明
| 指令 | 作用 |
|---|---|
listen |
监听端口(如 80, 443 ssl) |
server_name |
域名匹配(支持通配符 *.example.com) |
location |
URL 路径匹配(精确、前缀、正则) |
root |
静态文件根目录 |
alias |
路径别名(注意与 root 区别) |
proxy_pass |
反向代理目标地址 |
upstream |
定义后端服务器组(用于负载均衡) |
3. location 匹配规则优先级
=:精确匹配(最高优先级)^~:前缀匹配,且不再检查正则~/~*:区分大小写 / 不区分大小写的正则匹配- 普通前缀匹配(最长前缀优先)
/:默认匹配
示例:
location = / {
# 仅匹配根路径
}
location ^~ /static/ {
# 匹配 /static/ 开头,不走正则
}
location ~ \.php$ {
# 匹配 .php 结尾
}
四、常用功能实战
1、静态资源服务(Static File Serving)
专业解释 :
Nginx 可以直接读取服务器上的文件(如 HTML、CSS、JavaScript、图片等),并将其返回给客户端浏览器,无需经过后端程序处理。这种方式效率高、延迟低,是托管前端项目的标准做法。
生活例子 :
想象你开了一家便利店,货架上摆满了饮料和零食。顾客进店后,可以直接拿走商品,不需要你现场制作。Nginx 就像这个货架------用户要什么文件,它就直接从硬盘上"拿"出来给用户,速度快,也不用麻烦后端"厨师"动手。
典型配置:
server {
listen 80;
server_name example.com;
root /var/www/my-website;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
2、反向代理(Reverse Proxy)
专业解释 :
反向代理是指 Nginx 接收客户端请求后,将请求转发给内部的后端服务(如运行在 3000 端口的 Node.js 应用),再把后端的响应返回给客户端。客户端只知道 Nginx 的地址,不知道后端的真实位置。
生活例子 :
你去银行办事,先到大堂经理那里说明需求。大堂经理不会让你自己去找柜员,而是帮你联系合适的工作人员处理,最后把结果告诉你。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;
}
}
3、负载均衡(Load Balancing)
专业解释 :
当单台后端服务器无法承受高流量时,Nginx 可以将请求分发到多台服务器上,实现流量分摊,提高系统整体的可用性和性能。
生活例子 :
一家热门餐厅门口排长队,老板临时开了三个点餐窗口。新来的顾客由引导员按顺序分配到空闲窗口。这样大家不用挤在一个窗口,整体效率更高。Nginx 就是这个引导员,后端服务器就是三个点餐窗口。
典型配置:
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend;
}
}
4、虚拟主机(Virtual Host / Server Block)
专业解释 :
一台服务器可以通过 Nginx 配置多个网站,每个网站通过不同的域名或端口区分。这种机制称为虚拟主机,是共享主机资源的基础。
生活例子 :
一栋写字楼里有几十家公司,它们共用同一栋楼、同一个大门,但每家公司有自己的门牌号(如"5楼A座")。快递员根据公司名称找到对应楼层。Nginx 就像大楼前台,根据用户访问的域名(公司名)把请求引导到正确的"房间"(网站配置)。
典型配置:
server {
listen 80;
server_name blog.example.com;
root /var/www/blog;
}
server {
listen 80;
server_name shop.example.com;
root /var/www/shop;
}
5、HTTPS 与 SSL 终止(SSL Termination)
专业解释 :
Nginx 可以处理 HTTPS 请求的解密工作(即 SSL/TLS 终止),将加密的流量解密后以普通 HTTP 转发给后端服务。这样后端无需处理加密逻辑,减轻负担。
生活例子 :
你收到一封加密信件,但只有你能用钥匙打开。你拆开信封后,把里面的内容念给家人听。Nginx 就是你------它用证书(钥匙)解开 HTTPS 信封,然后把明文内容(HTTP 请求)告诉后端"家人"。
典型配置:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
6、缓存与压缩(Caching and Compression)
专业解释 :
Nginx 支持对静态资源设置浏览器缓存策略,并可对响应内容启用 Gzip 压缩,减少传输体积,加快页面加载速度。
生活例子 :
你常去的咖啡店记住你爱喝"美式",下次你一进门,店员直接给你做,不用再问。这是"缓存"。
另外,店员把咖啡装进更小的杯子送给你,节省托盘空间------这是"压缩"。
Nginx 既能让浏览器记住文件(减少重复下载),也能把文件"压小"再发送。
典型配置:
gzip on;
gzip_types text/css application/javascript;
location ~* \.(jpg|css|js)$ {
expires 30d;
}
五,常见错误与排查思路
- 403 Forbidden:Nginx 没有权限读取文件。检查文件所属用户和权限。
- 404 Not Found:请求的路径在服务器上不存在。确认 root 或 alias 路径是否正确。
- 502 Bad Gateway:Nginx 无法连接到后端服务。检查后端是否运行、端口是否正确。
- 配置未生效:修改配置后必须重载 Nginx(nginx -s reload),否则仍使用旧配置。
建议始终查看日志文件:/var/log/nginx/error.log