Nginx(读作 “engine-x”)是一个高性能的 Web 服务器、反向代理服务器和负载均衡器。它最初由 Igor Sysoev 开发,核心目标是解决高并发连接的问题。

现在它已经成为互联网基础设施里最常见的软件之一,很多网站、API、网关、Kubernetes Ingress 都在用它。


一、Nginx 是干什么的

Nginx 本质上可以做 5 件核心事情:

功能 说明
静态文件服务器 提供 HTML/CSS/JS/图片
反向代理 转发请求给后端服务
负载均衡 把流量分发到多台机器
HTTPS 网关 TLS/SSL 终止
网关/边缘层 限流、缓存、鉴权、压缩等

二、Nginx 的典型架构位置

最经典的部署:

用户浏览器
    ↓
 Nginx
    ↓
后端应用(Java / Go / Node / Python)

比如:

https://example.com
        ↓
     Nginx
        ↓
  127.0.0.1:8080

Nginx 对外暴露 80/443 端口。

后端程序只跑内部端口。


三、为什么大家喜欢 Nginx

核心原因:

1. 高性能

Nginx 用的是:

  • 事件驱动

  • 非阻塞 IO

  • epoll(Linux)

所以它:

  • 内存占用低

  • 并发能力强

  • 非常适合大量连接


2. 适合高并发

Apache 的传统模式:

一个请求 = 一个线程

Nginx:

一个 worker 处理大量连接

所以 Nginx 更轻量。

PS:Apache、Nginx、Tomcat 的关系

很多人第一次接触会混。

实际上:

软件 本质
Apache HTTP Server Web Server
Nginx Web Server / Reverse Proxy
Tomcat Java Application Server

核心区别:

Apache/Nginx
    主要处理 HTTP

Tomcat
    主要运行 Java Web 应用

最经典架构

Browser
   ↓
Nginx / Apache
   ↓
Tomcat
   ↓
Java代码

为什么不直接让 Tomcat 对外?

因为 Tomcat:

  • 动态能力强

  • 但静态资源能力弱

  • 并发能力不如 Nginx

  • HTTPS、缓存、限流不专业

所以:

Nginx负责“入口”
Tomcat负责“业务”

一个形象理解

Nginx

像:

酒店前台

负责:

  • 接待

  • 分流

  • 安检

  • 排队


Tomcat

像:

真正干活的后厨

负责:

  • 执行业务逻辑

  • 查数据库

  • 返回结果


3. 配置简单

配置文件结构清晰:

http {
    server {
        listen 80;

        location / {
            proxy_pass http://127.0.0.1:8080;
        }
    }
}

四、Nginx 核心概念


1. worker 进程

Nginx 架构:

master process
    ├── worker
    ├── worker
    ├── worker

master:

  • 管理配置

  • 管理 worker

worker:

  • 真正处理请求

一般:

worker_processes auto;

自动等于 CPU 核数。


2. event loop

Nginx 最大特点。

它不是:

请求来了 → 创建线程

而是:

一个 worker
    ↓
监听大量 socket
    ↓
谁可读就处理谁

这就是:

  • Reactor 模式

  • 事件驱动


3. location

location 是路由规则。

例如:

location /api/ {
    proxy_pass http://backend;
}

表示:

/api/*

都转发给后端。


4. upstream

upstream 是后端服务池。

upstream backend {
    server 10.0.0.1:8080;
    server 10.0.0.2:8080;
}

然后:

proxy_pass http://backend;

五、反向代理(最重要)

这是 Nginx 最核心用途。


什么叫反向代理

用户:

以为自己访问的是 nginx

实际上:

nginx 去访问后端

用户根本不知道后端是谁。


请求流程

Browser
   ↓
Nginx:443
   ↓
Spring Boot:8080

Nginx:

  • 接收 HTTPS

  • 解密 TLS

  • 转发 HTTP

  • 返回结果


配置示例

server {
    listen 80;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

PS:什么是 TLS 解密

HTTPS:

HTTP + TLS加密

浏览器发送的是:

加密后的数据

服务器必须:

先解密
再看HTTP内容

这个过程:

TLS termination

或者:

SSL termination

TLS 终止(TLS termination)

比如:

Browser
   ↓ HTTPS
Nginx
   ↓ HTTP
Tomcat

Nginx:

  • 负责 TLS 握手

  • 解密 HTTPS

  • 转成普通 HTTP 给 Tomcat

这叫:

TLS terminated at Nginx

为什么这么做

因为 TLS 很耗 CPU。

RSA/ECDHE/AES 都有计算。

如果让每个 Java 服务自己搞:

  • 成本高

  • 配置复杂

  • 性能差

所以统一放 Nginx。


六、负载均衡


最简单的负载均衡

upstream app {
    server 10.0.0.1:8080;
    server 10.0.0.2:8080;
    server 10.0.0.3:8080;
}

Nginx 默认:

轮询(round robin)

其它策略

1. 权重

server 10.0.0.1 weight=5;

2. IP 哈希

ip_hash;

同一个用户总访问同一台机器。

适合 session。


3. 最少连接

least_conn;

PS:ip_hash 和 least_conn 怎么做的


1. ip_hash

目标:

同一个用户固定到同一台机器

原理

Nginx:

hash(client_ip) % server_count

例如:

192.168.1.1
    ↓
hash
    ↓
server2

所以:

  • session 不丢

  • 用户固定

缺点:

  • 不均衡

  • NAT (网络地址转换)下很多用户同 IP


2. least_conn

目标:

谁最闲给谁

Nginx 维护:

server1: 120 connections
server2: 40 connections
server3: 9 connections

新请求:

给 server3

适合:

  • 长连接

  • WebSocket

  • 请求耗时不均


七、HTTPS 支持

Nginx 经常做 TLS 终止。


HTTPS 配置

server {
    listen 443 ssl;

    ssl_certificate cert.pem;
    ssl_certificate_key key.pem;

    location / {
        proxy_pass http://backend;
    }
}

八、静态资源优化

Nginx 非常适合:

  • 图片

  • CSS

  • JS

  • 视频

因为它:

  • sendfile

  • 零拷贝

  • 文件缓存

性能非常高。


九、常见场景


1. 前后端分离

Vue React
    ↓
 Nginx
    ↓
 Java API

2. Kubernetes Ingress

很多 Ingress Controller:

  • nginx ingress

本质就是:

K8s + Nginx

PS:Kubernetes Ingress 是什么

K8s 里:

Pod 会频繁变化

需要:

统一流量入口

Ingress 就是:

K8s里的反向代理规则

Ingress Controller

真正干活的:

Nginx Ingress Controller

它会:

读取Ingress配置
    ↓
自动生成nginx.conf

例如

apiVersion: networking.k8s.io/v1
kind: Ingress
spec:
  rules:
  - host: api.test.com
    http:
      paths:
      - path: /user
        backend:
          service:
            name: user-service

相当于自动生成:

location /user {
    proxy_pass http://user-service;
}


3. API Gateway

Nginx 可以做:

  • 限流

  • 鉴权

  • JWT

  • CORS

  • 灰度发布


十、常见配置


1. gzip 压缩

gzip on;
gzip_types text/css application/json;

2. 跨域

add_header Access-Control-Allow-Origin *;

3. 限流

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

4. 缓存

proxy_cache_path /tmp/nginx_cache;

十一、Nginx vs Apache

对比 Nginx Apache
并发模型 事件驱动 多线程/多进程
高并发 一般
静态资源 一般
动态语言 依赖代理 模块生态强
内存占用

十二、Nginx 的缺点

1. 配置有点反直觉

尤其:

  • location 匹配

  • rewrite

  • proxy_pass 尾斜杠

很容易踩坑。


2. 动态模块不如 Apache 灵活

虽然现在改善很多。


十三、一个完整例子

worker_processes auto;

events {
    worker_connections 1024;
}

http {

    upstream backend {
        server 127.0.0.1:8080;
        server 127.0.0.1:8081;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
        }

        location /static/ {
            root /var/www/html;
        }
    }
}

十四、现代架构里的 Nginx

今天 Nginx 经常出现在:

CDN
API Gateway
Kubernetes
微服务
Service Mesh 边缘层

很多云厂商底层其实也是 Nginx 魔改版。

例如:

  • OpenResty

  • Kong

  • APISIX

  • Tengine

都是基于 Nginx。


十五、一句话总结

Nginx 本质上是:

一个基于事件驱动模型的高性能网络服务器,核心能力是“高效处理大量连接”。

最重要的能力:

反向代理 + 负载均衡 + 高并发

如果你愿意,我还能继续讲:

  • Nginx 配置文件详解

  • location 匹配规则

  • proxy_pass 为什么容易错

  • Nginx 工作原理源码级分析

  • epoll/reactor 模型

  • Nginx + Docker

  • Nginx + Kubernetes

  • OpenResty

  • Lua 扩展

  • Nginx 性能调优

  • 面试高频题


七、JWT 是什么

JWT:

JSON Web Token

本质:

一种“自带签名”的身份凭证

传统 Session

session_id → Redis查用户

JWT:

token里直接有用户信息

JWT 结构

header.payload.signature

例如:

eyJhbGci...

优点

  • 无状态

  • 微服务方便

  • 不依赖 session


八、CORS 是什么

浏览器安全策略:

禁止跨域

比如:

a.com
请求
b.com

会被拦。


CORS

Cross-Origin Resource Sharing。

服务器告诉浏览器:

我允许跨域

Nginx 配置

add_header Access-Control-Allow-Origin *;

九、灰度发布

目标:

新版本先给少量用户

方法

1. 按 IP

10% 用户走 v2

2. 按 Cookie


3. 按 Header


Nginx 可以:

if ($cookie_user = beta) {
    proxy_pass http://v2;
}

十、location 匹配规则(超级重要)


优先级

=      精确匹配
^~     前缀匹配
~      正则(区分大小写)
~*     正则(不区分)
/      普通前缀

示例

location = /login

精确匹配。


location ^~ /static/

最高优先级前缀。


location ~ \.php$

正则。


一个坑

location /api
location /api/v1

会选:

最长前缀

十一、proxy_pass 为什么容易错

因为:

尾斜杠规则反直觉

例子

location /api/ {
    proxy_pass http://backend/;
}

请求:

/api/user

结果:

/user

但:

proxy_pass http://backend;

会变:

/api/user

核心规律

proxy_pass 有 /

替换 location 前缀。


proxy_pass 没 /

保留原 URI。


十二、epoll / reactor 模型

这是 Nginx 的灵魂。


传统模型

一个连接一个线程

问题:

  • 线程切换贵

  • 内存大


epoll

Linux 内核:

帮你监听大量socket

应用:

不用轮询

Reactor 模式

核心:

事件来了再处理

Nginx worker

while(true) {
    epoll_wait()
}

谁可读:

处理谁

十三、Nginx 源码级工作原理


启动流程

main()
  ↓
ngx_master_process_cycle()

master:

  • 监听信号

  • 管理 worker


worker 核心循环

for (;;) {
    ngx_process_events_and_timers();
}

里面:

epoll_wait

请求处理链

accept
  ↓
read request
  ↓
rewrite
  ↓
access
  ↓
content
  ↓
log

模块化。


十四、OpenResty

OpenResty:

Nginx + LuaJIT

让 Nginx:

能写业务逻辑

Lua 扩展

例如:

access_by_lua_block {
    ngx.say("hello")
}

可以:

  • JWT校验

  • API网关

  • 限流

  • 动态路由


为什么强

LuaJIT:

  • 极快

  • 嵌入 Nginx event loop

  • 不需要额外进程


十五、Nginx + Docker

最常见:

FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf

作用

容器里:

  • 做静态资源服务

  • 做网关

  • 做 sidecar


十六、Nginx + Kubernetes

K8s 里常见:

Ingress Controller

本质:

Nginx Pod

监听:

K8s API

自动改配置。


十七、Nginx 性能调优


1. worker_processes

worker_processes auto;

2. worker_connections

worker_connections 65535;

最大连接数:

worker * connections

3. keepalive

减少 TCP 建连。


4. sendfile

sendfile on;

5. gzip

减少带宽。


6. upstream keepalive

避免频繁连接 Tomcat。


7. open_file_cache

缓存文件描述符。


十八、一句话串起来

现代 Web 架构:

Browser
   ↓ HTTPS
Nginx
   ↓ HTTP
Tomcat/Go/Node
   ↓
MySQL/Redis

其中:

  • Nginx 负责:

    • TLS

    • 反向代理

    • 负载均衡

    • 静态资源

    • 网关

  • 应用服务器负责:

    • 业务逻辑

  • epoll/reactor:

    • 是 Nginx 高并发核心

  • Kubernetes Ingress:

    • 是 K8s 世界里的 Nginx 自动化

  • OpenResty:

    • 是“可编程 Nginx”

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐