Nginx 详解 — 安装、配置、核心模块

来源:Egon 林海峰 — Nginx 详解 原始文件:raw/一、nginx详解 – Egon林海峰.md

内容概要

Egon 的 Nginx 详解是一篇从入门到实践的深度指南,涵盖 Nginx 的角色定位、安装部署、核心配置、模块详解四大板块。全文以生产实践为导向,每个知识点都配有可执行的配置示例。

一、Nginx 的角色与定位

Nginx 可充当五种角色:静态文件服务反向代理(Web 服务层)、七层负载均衡(HTTP upstream)、四层负载均衡(stream 模块)、动静分离。采用多进程 + 单线程 + epoll 异步非阻塞模型,单机可支撑 2-4 万并发连接。

同类对比:Apache(性能低、操作难)、Tengine(淘宝增强版)、OpenResty(Nginx+Lua)、IIS/lighttpd/GWS/BWS。

二、安装方式

yum 安装

  • 配置官方 yum 源(nginx.repo),区分 stable/mainline 通道
  • 产生关键目录:/etc/nginx/(配置)、/var/log/nginx/(日志)、/usr/sbin/nginx(命令)
  • 代理参数文件:fastcgi_paramsscgi_paramsuwsgi_params

源码安装

  • 依赖:gcc、pcre-devel、zlib-devel、openssl-devel
  • 典型参数:--prefix--with-http_stub_status_module--with-http_ssl_module
  • 步骤:configure → make → make install
  • 后置操作:软连接、环境变量、systemd 服务单元配置

三、常用命令

命令作用
nginx启动
nginx -s reload优雅重载配置
nginx -s stop/quit强制停止/优雅停止
nginx -t测试配置正确性
nginx -V查看版本和编译模块
systemctl enable nginx开机自启

四、核心配置结构

Nginx 配置采用分块层级结构

main(全局块)
├── events 块(网络IO配置)
├── http 块(HTTP 协议相关)
│   ├── upstream 块(后端服务器池)
│   ├── server 块(虚拟主机)
│   │   └── location 块(URL 匹配与处理)
│   └── ...
└── stream 块(四层 TCP/UDP 代理)
    └── server 块

main 块关键指令

  • worker_processes:CPU 核心数
  • worker_connections:单 worker 最大连接数
  • worker_rlimit_nofile:文件描述符上限
  • pid:PID 文件路径
  • include:引入其他配置文件

events 块

  • use epoll:Linux 高效 IO 模型
  • multi_accept on:一次接受所有新连接

http 块关键指令

  • sendfile:零拷贝文件传输
  • tcp_nopush/tcp_nodelay:TCP 优化
  • keepalive_timeout:长连接超时
  • types_hash_max_size:MIME 类型哈希表大小

server 块(虚拟主机)

  • listen:监听 IP:端口
  • server_name:域名匹配(支持精确/通配符/正则)
  • index:默认索引文件
  • root / alias:文档根目录
  • error_page:自定义错误页

五、location 匹配规则(核心重点)

匹配优先级(从高到低)

优先级语法示例说明
1(最高)= uri= /logo.png精确匹配,命中即止
2^~ uri^~ /static/前缀匹配,命中后不再检查正则
3~ pattern~ \.php$正则匹配(区分大小写)
4~* pattern~* \.jpg$正则匹配(不区分大小写)
5(最低)uri/ / /api/普通前缀匹配,最长的优先

完整流程:

  1. 先检查 精确匹配=),命中直接返回
  2. 再检查 前缀匹配^~ 和普通前缀),记录最长匹配
  3. 如果有 ^~ 命中,跳过正则检查
  4. 否则按定义顺序检查正则匹配~ / ~*
  5. 正则匹配成功则用该 location;否则用第 2 步记录的最长前缀

命名 location

@name 形式,用于内部重定向(类似 goto),不暴露给客户端。

六、root 与 alias 指令

  • rootroot /var/www/html + 请求 /egon/xxx → 查找 /var/www/html/egon/xxx拼接
  • aliasalias /mmm/ + 请求 / → 查找 /mmm/不拼接,直接替换)

alias 末尾必须加斜杠/),否则路径拼接异常。

七、代理指令

指令协议典型下游
proxy_passHTTP应用服务器、uWSGI(http 模式)
fastcgi_passFastCGIPHP-FPM
uwsgi_passuWSGI(uwsgi 协议)uWSGI(socket 模式)
scgi_passSCGISCGI 应用

八、upstream 负载均衡

upstream 模块定义后端服务器池,配合代理指令使用。

调度算法:轮询(默认)、weight 权重、ip_hash、least_conn。

参数

  • weight:权重
  • max_fails / fail_timeout:故障转移
  • backup:备用服务器
  • down:永久下线

九、动静分离

通过 location 区分动态请求(转给应用服务器)和静态请求(直接由 Nginx 响应),减轻应用层压力。支持按路径分离/static/)和按扩展名分离\.(jpg|png|css|js)$)。

十、资源分离(User-Agent 分流)

利用 if ($http_user_agent ~* ...) 判断客户端类型,将 Android/iOS/PC 请求转发到不同的 upstream 池,实现终端适配。

十一、rewrite 重写

URL 重写模块,用于 URL 规范化、跳转等场景。详见 Egon 另一篇文章。

相关页面