Nginx 学习笔记

目录

[一、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 匹配规则优先级

  1. =:精确匹配(最高优先级)
  2. ^~:前缀匹配,且不再检查正则
  3. ~ / ~*:区分大小写 / 不区分大小写的正则匹配
  4. 普通前缀匹配(最长前缀优先)
  5. /:默认匹配

示例:

复制代码
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


六、学习资料推荐

相关推荐
风123456789~2 小时前
【健康管理】第12章 健康信息学 1/2
笔记·考证·健康管理
_Minato_2 小时前
数据库知识整理——数据库控制功能
数据库·经验分享·笔记·软考·计算机系统
Arenaschi2 小时前
安卓显示翻转
android·网络·人工智能·笔记·其他
jimmyleeee3 小时前
人工智能基础知识笔记二十六:常用的LLM的网站
人工智能·笔记
QiZhang | UESTC3 小时前
学习日记day46
学习
im_AMBER3 小时前
Leetcode 75 数对和 | 存在重复元素 II
c++·笔记·学习·算法·leetcode
悟能不能悟3 小时前
Apache和nginx的区别
运维·nginx
副露のmagic3 小时前
更弱智的算法学习 day9
python·学习·算法
Blossom.1183 小时前
基于MLOps+LLM的模型全生命周期自动化治理系统:从数据漂移到智能回滚的落地实践
运维·人工智能·学习·决策树·stable diffusion·自动化·音视频