Nginx的概述和使用清单

 更新时间:2026年07月28日 09:20:31   作者:泡沫冰@  
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3代理服务器,这篇文章给大家介绍Nginx的概述和使用清单,感兴趣的朋友跟随小编一起看看吧

Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3 代理服务器。它是作为一款轻量级的服务器,专门设计用来处理高并发连接,非常适合用在资源受限的环境中。Nginx 最初是为俄罗斯访问量第二的网站 Yandex.ru 而开发的,现在它已经成为全球最流行的 Web 服务器之一。

一、Nginx介绍

Nginx(发音 “engine-x”)是一款高性能的开源 Web 服务器,也常用作反向代理、负载均衡和 HTTP 缓存。

作用

角色作用

Web 服务器

直接对外提供静态文件(HTML、CSS、图片等)

反向代理

把请求转发给后端(如 Node、Python、Java),对外只暴露 Nginx

负载均衡

把流量分到多台后端服务器

SSL 终结

在入口处理 HTTPS,后端可走 HTTP

优点

  • 高并发、低资源占用:事件驱动、异步非阻塞,适合大量连接
  • 配置简单:一个 nginx.conf 就能管站点、代理、限流等
  • 稳定成熟:生产环境里非常普遍

典型架构

用户 → Nginx(80/443)→ 静态文件
                                        → 或转发到后端应用(如 :3000、:8080)

核心概念

  • server:一个虚拟主机(域名 / 端口)
  • location:按 URL 路径匹配规则
  • proxy_pass:反向代理到上游服务
  • upstream:定义一组后端服务器(负载均衡用)

最小配置示例

server {
    listen 80;  # 监听的端口
    server_name example.com;  # 虚拟主机的名字
    location / {
        root /var/www/html;
        index index.html;
    }
    location /api/ {
        proxy_pass http://127.0.0.1:3000/; # 反向代理
    }
}

含义:根路径返回静态页面;/api/ 转发给本机 3000 端口的应用。

总结:Nginx 站在最前面,负责接流量、发静态、转后端、做负载和 HTTPS。

二、企业中 Nginx 的使用

企业里 Nginx 几乎总是放在流量入口,很少当“唯一应用服务器”。

一、用法

1. 统一入口 / 反向代理(最常见)

客户端

→ CDN / WAF(可选)

→ Nginx / Ingress(入口)

→ 后端服务(Java / Go / Node / 微服务)

典型职责:

  • 对外只暴露 80/443
  • 按域名、路径把请求转到不同服务
  • 统一加 HTTPS、日志、限流、鉴权头
server {
    listen 443 ssl;
    server_name api.company.com;
    location /user/ {
        proxy_pass http://user-service;
    }
    location /order/ {
        proxy_pass http://order-service;
    }
}

2. 静态资源托管

官网、运营页、前端打包产物(dist/)由 Nginx 直接提供:

  • HTML / JS / CSS / 图片 / 字体
  • 开启 gzip/brotli、缓存头、try_files 支持 SPA
location / {
    root /data/www/app;
    try_files $uri $uri/ /index.html;
}

3. 负载均衡

后端多实例时,Nginx 做分发:

upstream app_backend {
    least_conn;
    server 10.0.1.11:8080 weight=3;
    server 10.0.1.12:8080 weight=2;
    server 10.0.1.13:8080 backup;
}
server {
    location / {
        proxy_pass http://app_backend;
    }
}

常见算法:round-robinleast_connip_hash(会话粘滞)。

4. HTTPS / 证书终结

企业标配:

  • 证书挂在 Nginx(或网关)上
  • 后端内网走 HTTP / mTLS
  • 强制 HTTP→HTTPS、HSTS

5. 灰度 / 蓝绿 / 金丝雀

按 Header、Cookie、IP、百分比切流量:

# 简化示意:带灰度 cookie 的走新版本
if ($cookie_canary = "1") {
    proxy_pass http://app_canary;
}

更复杂场景常配合 OpenResty、Ingress Controller、Service Mesh。

6. API 网关轻量能力

不是完整 API Gateway,但企业常让 Nginx 承担一部分:

  • 路径改写、Header 注入
  • IP 白名单 / 黑名单
  • 基础鉴权(Basic Auth、JWT 校验多靠模块或上游)
  • 限流限连
  • 跨域 CORS

7. 与 Kubernetes 结合

  • Ingress-Nginx / Nginx Ingress Controller
  • 每个 Ingress 规则最终变成 Nginx 配置
  • 负责集群南北向流量

8. 内网场景

  • 管理后台入口
  • 跳板式反向代理(内网系统统一域名)
  • 文件下载 / 大文件加速(sendfile、断点续传)

9. 高可用部署形态

形态说明

主备 + Keepalived

VIP 漂移,单机房常见

多机 + L4(SLB/F5)

云上很常见:SLB → 多台 Nginx

容器化多副本

K8s Deployment + Service

CDN 前置

静态/边缘缓存,源站仍是 Nginx

二、知识体系

按优先级分层,从“能上线”到“能扛事”。

A. 基础必会

1. 进程与架构
  • Master / Worker 模型
  • Worker 数与 CPU 核数关系
  • 事件驱动、非阻塞 I/O 为什么能扛高并发
  • 配置热加载:nginx -t → nginx -s reload
2. 配置结构

main
 └─ events
 └─ http
     ├─ upstream
     ├─ map
     └─ server
         └─ location

要清楚:指令作用域(哪些写在 http,哪些只能在 server/location)。

3.server/location匹配规则
  • listen + server_name 如何选虚拟主机
  • location 优先级:精确 = > 前缀 ^~ > 正则 ~/~* > 普通前缀
  • root vs alias
  • try_files(SPA、静态站必备)
4. 反向代理核心

proxy_pass

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;

proxy_connect_timeout

proxy_send_timeout

proxy_read_timeout

proxy_buffering

client_max_body_size

理解:

  • proxy_pass 末尾有无 / 对路径改写的影响
  • 为什么后端拿到的 IP/协议可能不对(没传 X-Forwarded-*
  • 超时、缓冲、大文件上传失败怎么查
5. 静态与压缩缓存
  • expires / Cache-Control
  • gzip / brotli
  • sendfiletcp_nopushtcp_nodelay
  • 静态资源版本号与长期缓存策略
6. HTTPS
  • 证书、私钥、中间证书链
  • TLS 版本与 cipher(安全基线)
  • HTTP/2、OCSP Stapling(进阶)
  • 强制跳转与 HSTS 风险(配错会“锁死”域名)
7. 日志与排障
  • access_log / error_log
  • 自定义 log_format(加 request_id、上游耗时)
  • 常见状态码:502/504(上游挂/超时)、413(上传过大)、499(客户端断开)
  • nginx -T 查看最终生效配置

B. 企业生产进阶(中高级)

8. 负载均衡与健康检查
  • upstream 权重、backupdown
  • ip_hash / sticky(会话)
  • 被动失败检测:max_failsfail_timeout
  • 主动健康检查(开源版弱,商业版/OpenResty/Ingress 更强)
9. 限流限连与防刷

limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

limit_conn_zone $binary_remote_addr zone=addr:10m;

limit_req zone=api_limit burst=20 nodelay;

limit_conn addr 20;

理解:

  • rateburstnodelay 含义
  • 按 IP / 用户 / API 维度限流
  • 与 WAF、网关限流的分工
10. 安全加固
  • 隐藏版本号 server_tokens off
  • 方法限制(禁 TRACE 等)
  • IP allow/deny
  • 危险目录禁止访问(.git、备份文件)
  • 请求头大小、URI 长度限制
  • SSRF / 开放代理风险(错误 proxy_pass 变量)
  • TLS 与安全响应头:X-Frame-OptionsCSP 等(常在 Nginx 统一加)
11. 改写与路由
  • rewritereturn
  • map(强烈推荐,替代一堆 if
  • 为什么企业规范常写:尽量少用 if
12. 变量与内部机制
  • $host / $http_host / $uri / $request_uri 区别
  • $remote_addr vs 真实客户端 IP(real_ip 模块 + 可信代理)
  • $upstream_addr$upstream_status$upstream_response_time
13. 性能调优方向
  • worker_processesworker_connections
  • 文件描述符上限
  • keepalive 到上游:keepalive in upstream + proxy_http_version 1.1
  • 缓冲与临时文件(大响应、慢客户端)
  • 连接耗尽、队列打满的表现
14. 配置工程化

企业不会手改一台机器的 conf,而是:

  • 配置分片:conf.d/sites-enabled/
  • Ansible / Salt / 镜像构建注入配置
  • CI 里跑 nginx -t
  • 灰度发布配置、回滚
  • 模板化(Helm values → Ingress / ConfigMap)

C. 架构关联知识(理解“Nginx 在系统中的位置”)

15. 和周边组件怎么分工
组件更擅长Nginx 更擅长

CDN

全球缓存、抗攻击边缘

源站接入、动态反代

SLB/L4

四层转发、高可用

七层路由、TLS、改写

API Gateway

鉴权、计费、协议转换

高性能反代、静态、TLS

WAF

规则防护、Bot

基础限流/IP 控制

Service Mesh

东西向、mTLS、重试

南北向入口

16. 微服务 / K8s 必懂
  • Ingress 规则与注解(超时、正文大小、会话亲和)
  • 服务发现变化时上游如何更新
  • 就绪探针失败时流量摘除
  • WebSocket / gRPC 反代要点(升级头、HTTP/2)
17. 可观测性
  • 访问日志进 ELK / Loki
  • 指标:QPS、延迟、5xx、上游耗时(Prometheus exporter)
  • Trace:注入 / 传递 X-Request-ID

三、按角色看“要学多深”

角色重点

前端

静态部署、try_files、缓存、gzip、HTTPS、CORS、代理到本地/测试环境

后端开发

反代头、超时、上传大小、WebSocket、路径改写、502/504 排查

运维 / SRE

全套:HA、性能、安全、日志指标、配置发布、排障

架构师

入口分层、与 CDN/网关/Mesh 边界、多活与灰度流量策略

四、建议学习路径(可执行)

  1. 本地搭一台:静态站 + 反代一个后端
  2. 刻意练匹配:多个 server_name / location,搞清谁命中
  3. 上 HTTPS + 日志:自己看 access/error 定位问题
  4. 加 upstream + 限流:模拟一台挂掉、突发流量
  5. 做一份生产 checklist:超时、body 大小、真实 IP、keepalive、安全头
  6. 再学 Ingress / OpenResty:对应云原生或复杂网关需求

五、企业生产配置 Checklist

上线前至少确认:

  1. nginx -t 通过,reload 无损
  2. HTTPS 证书链完整,HTTP 自动跳转正确
  3. Host / X-Forwarded-* / 真实 IP 正确
  4. client_max_body_size 与业务上传一致
  5. proxy_read_timeout 覆盖最长接口
  6. 上游 keepalive 已开
  7. 限流与连接数有兜底
  8. 日志含 request id、上游状态与耗时
  9. 隐藏版本、禁敏感路径
  10. 502/504 有监控告警与扩容/摘除预案

总结

企业用 Nginx,本质是“流量入口与流量治理”:反代、TLS、静态、负载、限流、日志;
要掌握的核心,是配置模型 + 反代细节 + 匹配规则 + 超时/头/真实 IP + 安全限流 + 排障与高可用,而不是背一堆指令。

三、Nginx 运维 / SRE 版知识点清单

面向:日常接流量、排障、变更、保可用性。

SRE 视角下 Nginx 的定位:

每天真正在管的是:

  1. 入口是否可用(VIP / SLB / Ingress 后面的 Nginx)
  2. 流量是否按预期路由(域名、路径、灰度)
  3. 后端是否被正确保护(超时、限流、隔离)
  4. 出了问题能否 5 分钟内定位(日志、指标、配置差量)

核心不是“会写 conf”,而是:变更可控、故障可观测、回滚可快速。

场景 A:新站点 / 新域名上线

会做的事

  • 加 server、证书、反代或静态目录
  • 配 DNS / SLB 转发
  • 灰度切流、观察 4xx/5xx

必会知识点

  • listen / server_name 匹配(默认 server 陷阱)
  • root vs aliastry_files(SPA)
  • proxy_pass 路径拼接规则(末尾 /
  • 证书全链、SAN、到期监控
  • HTTP→HTTPS、HSTS 启用节奏(先观察再强制)
  • 上线前:nginx -t、reload、回滚文件准备

验收标准

  • 主备/多实例配置一致
  • 访问日志能区分新域名
  • 证书监控已接入
  • 回滚步骤可一键执行

场景 B:反代后端 API / 微服务

日常问题

  • 502/504
  • 上传失败 413
  • 后端拿到错 IP / 错协议
  • 登录态丢失、跨域异常

必会知识点:

proxy_http_version 1.1;
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;
proxy_set_header Connection "";
proxy_connect_timeout 3s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
client_max_body_size 50m;

还要懂:

  • 上游 keepalive(upstream { keepalive N; }
  • buffering 开/关对大响应、TTFB 的影响
  • WebSocket:Upgrade / Connection
  • gRPC:grpc_pass、HTTP/2
  • real_ip 模块:从 SLB/CDN 取真实客户端 IP(可信网段)

排障抓手

  • $upstream_addr $upstream_status $upstream_response_time $request_time
  • 区分:Nginx 慢 vs 上游慢 vs 客户端慢

场景 C:负载均衡与摘流

日常操作

  • 扩容加节点、发布摘流、机器故障打 down
  • 会话粘滞争议(要不要 ip_hash

必会知识点

  • upstreamweight / backup / down
  • max_fails + fail_timeout(被动健康检查局限)
  • 算法:轮询、least_connip_hash
  • 主动健康检查能力边界(开源 vs Plus / 外部探活)
  • 发布期:先摘流再停服务,避免 502 尖刺
  • 与注册中心/K8s endpoint 变更的时序

SRE 原则

  • 摘流要可脚本化,禁止只改一台忘了集群
  • 发布窗口看:5xx、上游耗时、饱和连接数

场景 D:静态资源 / 前端发布

日常操作

  • 发 dist、回滚静态版本
  • 缓存导致“发了但用户看不到”

必会知识点

  • expires / Cache-Control / etag
  • HTML 短缓存或不缓存,带 hash 的 JS/CSS 长缓存
  • gzip/brotli、sendfile
  • 原子发布:新目录 + 切换 symlink,避免半发布
  • CDN 回源与源站缓存头一致性

场景 E:HTTPS / 证书生命周期

日常操作

  • 申请/续期/替换证书
  • 协议版本、弱加密治理
  • 双证书(RSA + ECDSA)偶发

必会知识点

  • 证书链不完整导致部分客户端失败
  • ssl_certificate / ssl_certificate_key
  • TLS1.2/1.3、cipher 套件基线
  • OCSP Stapling
  • 到期告警(30/14/7 天)
  • 替换证书是否需要 reload、多机同步

事故高发点

  • 只更了一台
  • 中间证丢了
  • HSTS 预加载后证书搞砸(恢复极痛)

到此这篇关于Nginx的概述和使用清单的文章就介绍到这了,更多相关nginx介绍和使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx 代理与负载均衡详解

    Nginx 代理与负载均衡详解

    这篇文章主要介绍了Nginx 代理与负载均衡详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • Nginx使用logrotate实现日志轮转与保留策略!

    Nginx使用logrotate实现日志轮转与保留策略!

    本文介绍了使用logrotate工具实现Nginx日志按天切割的方法,解决日志文件过大导致的管理问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-04-04
  • nginx访问控制的实现示例

    nginx访问控制的实现示例

    这篇文章主要介绍了nginx访问控制的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Nginx如何限制IP访问只允许特定域名访问

    Nginx如何限制IP访问只允许特定域名访问

    我们在使用的时候会遇到很多的恶意IP攻击,这个时候就要用到Nginx 禁止IP访问了,下面这篇文章主要给大家介绍了关于Nginx如何限制IP访问只允许特定域名访问的相关资料,需要的朋友可以参考下
    2022-07-07
  • 详解如何基于Nginx搭建流媒体服务器

    详解如何基于Nginx搭建流媒体服务器

    Nginx RTMP是一个Nginx插件,支持将RTMP和HLS流添加到媒体服务器,本文将以ubuntu为例为大家介绍一下如何安装使用nginx Rtmp 插件的步骤,需要的可以参考下
    2023-10-10
  • Web技术与Nginx网站环境部署教程

    Web技术与Nginx网站环境部署教程

    这篇文章主要介绍了Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Nginx修复CORS漏洞的实现方法

    Nginx修复CORS漏洞的实现方法

    本文主要介绍了CORS不安全配置漏洞的修复方法,通过修改Nginx配置,将Access-Control-Allow-Origin设置为正确的域名,以防止跨域资源共享时的隐私泄露风险
    2024-11-11
  • nginx缓存不起作用问题解决方法

    nginx缓存不起作用问题解决方法

    nginx代理做好了,缓存也配置好了,但是发现css、js、jpg这些静态文件统统都cached成功。但是偏偏页面文件依旧到源服务器取
    2014-04-04
  • nginx的keepalive相关参数使用源码解读

    nginx的keepalive相关参数使用源码解读

    这篇文章主要为大家介绍了nginx的keepalive相关参数使用源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Nginx try_files 指令常见用法示例

    Nginx try_files 指令常见用法示例

    try_files是Nginx用于按顺序检查文件是否存在并返回第一个找到的文件,本文给大家介绍Nginx try_files 指令常见用法示例,感兴趣的朋友跟随小编一起看看吧
    2026-05-05

最新评论