目录
前言:为什么要学 Nginx?
一、Nginx 基础入门:从零搭建第一个服务
1.1 初识 Nginx:它是什么,能做什么?
1.2 第一个 Nginx 服务:最小化配置实战
1.3 安装:Linux 里的 Nginx 魔法:从下载到部署,轻松拿捏!
二、核心架构与配置解析:读懂 Nginx 的 "运行逻辑"
2.1 架构精髓:Master-Worker 进程模型
2.2 配置骨架:从 http 到 location 的层级关系
2.3 静态资源服务:Nginx 的 "原生强项"
三、关键应用场景:Nginx 实战核心技能
3.1 反向代理:隐藏后端,统一入口
3.2 负载均衡:分摊压力,提升可用
3.3 动静分离:各司其职,极致性能
3.4 SSL/TLS 终端代理:打造 HTTPS 安全站点
四、性能优化与安全加固:让 Nginx 更稳更快
4.1 性能调优:从配置到内核的全维度优化
4.2 安全加固:抵御常见攻击
五、总结与展望:Nginx 的核心价值与未来
5.1 核心价值总结
5.2 Nginx 与其他技术的对比
5.3 未来发展趋势
📚 附录:Nginx 常用工具与资源
常用命令速查
配置文件检查清单
推荐学习资源
前言:为什么要学 Nginx?
学习Nginx,就是掌握如何为你的Web服务构建一个高效、可靠且强大的“交通中枢”
Nginx 的核心价值体现在三个关键方面:
- 高性能:采用事件驱动的异步非阻塞架构,能够轻松应对 C10K(甚至 C100K)问题
- 高可靠性:Master-Worker 进程模型确保服务稳定运行
- 高扩展性:模块化设计支持丰富的功能扩展
无论是作为 Web 服务器、反向代理、负载均衡器还是 API 网关,Nginx 都展现出了卓越的性能表现。本文将带你从零开始,全面掌握 Nginx 的核心概念和实战技能。
一、Nginx 基础入门:从零搭建第一个服务
1.1 初识 Nginx:它是什么,能做什么?
Nginx 的主要应用场景:
- Web 服务器:处理静态资源请求,性能远超传统服务器
- 反向代理服务器:隐藏后端服务,提供统一的访问入口
- 负载均衡器:在多台服务器间分配请求负载
- API 网关:处理 API 路由、认证、限流等能力
- 内容缓存:缓存动态和静态内容,提升响应速度
1.2 第一个 Nginx 服务:最小化配置实战
最小化配置文件示例
以源码安装的 Nginx 为例,配置文件路径为 /usr/local/nginx/conf/nginx.conf,最小可用配置如下:
1# -------------------------- main 区块(全局配置)-------------------------- 2# 工作进程数:建议设为 CPU 核心数,auto 表示自动匹配 3worker_processes auto; 4# 全局错误日志路径与级别(debug/info/notice/warn/error/crit) 5error_log /usr/local/nginx/logs/error.log warn; 6# 进程 PID 文件路径 7pid /usr/local/nginx/logs/nginx.pid; 8 9 10# -------------------------- events 区块(连接处理配置)-------------------------- 11events { 12 # 每个工作进程的最大连接数(默认 1024,需结合系统文件描述符调整) 13 worker_connections 1024; 14 # 事件模型:Linux 推荐 epoll,BSD 推荐 kqueue 15 use epoll; 16 # 允许一个连接同时被多个请求复用(HTTP 长连接相关) 17 multi_accept on; 18} 19 20 21# -------------------------- http 区块(HTTP 协议总配置)-------------------------- 22http { 23 # 引入 MIME 类型映射文件(定义文件后缀与 Content-Type 的对应关系) 24 include /usr/local/nginx/conf/mime.types; 25 # 未知文件类型的默认 Content-Type 26 default_type application/octet-stream; 27 28 # 日志格式定义(main 为格式名称,可自定义) 29 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 30 '$status $body_bytes_sent "$http_referer" ' 31 '"$http_user_agent" "$http_x_forwarded_for"'; 32 # 访问日志路径,使用 main 格式 33 access_log /usr/local/nginx/logs/access.log main; 34 35 # 启用零拷贝(直接磁盘→网卡传输,跳过用户态缓冲区,提升性能) 36 sendfile on; 37 # 与 sendfile 配合,合并数据包发送,减少 TCP 握手次数 38 tcp_nopush on; 39 # 禁用 Nagle 算法,小数据包即时发送(平衡延迟与效率) 40 tcp_nodelay on; 41 42 # 连接超时时间(客户端与 Nginx 保持连接的超时时间) 43 keepalive_timeout 65; 44 45 46 # -------------------------- server 区块(虚拟主机)-------------------------- 47 # 定义一个虚拟主机(可理解为“单个网站”) 48 server { 49 # 监听端口(默认 80,HTTP 标准端口) 50 listen 80; 51 # 绑定域名(多个域名用空格分隔,如 "example.com www.example.com") 52 server_name localhost; 53 54 # 字符集设置(避免中文乱码) 55 charset utf-8; 56 57 58 # -------------------------- location 区块(请求路径匹配)-------------------------- 59 # 匹配根路径 "/"(所有未被其他 location 匹配的请求都会命中这里) 60 location / { 61 # 网站根目录(静态资源存放路径) 62 root /usr/local/nginx/html; 63 # 默认首页(多个页面用空格分隔,按顺序查找) 64 index index.html index.htm; 65 } 66 67 # 匹配 404 错误页面 68 error_page 404 /404.html; 69 # 匹配 50x 系列错误(500/502/503/504) 70 error_page 500 502 503 504 /50x.html; 71 # 对应错误页面的路径配置 72 location = /50x.html { 73 root /usr/local/nginx/html; 74 } 75 } 76} 77
配置优化示例:
1# 在nginx.conf的main块中设置 2worker_processes auto; # 自动设置为CPU核心数 3worker_cpu_affinity auto; # 自动绑定CPU核心 4 5# 设置每个Worker进程的最大文件打开数 6worker_rlimit_nofile 100000; 7 8events { 9 worker_connections 4096; # 每个Worker的最大连接数 10 use epoll; # Linux高性能事件模型 11 multi_accept on; # 一次接受所有新连接 12}
1.3 安装:Linux 里的 Nginx 魔法:从下载到部署,轻松拿捏!
参考这篇博客:
https://blog.csdn.net/qq%5F59998784/article/details/146231297?spm=1011.2415.3001.5331
二、核心架构与配置解析:读懂 Nginx 的 "运行逻辑"
2.1 架构精髓:Master-Worker 进程模型
Nginx 采用经典的 Master-Worker 多进程架构,这种设计确保了高稳定性和性能。
进程架构详解:
1Master Process (PID: 1234) [管理者] 2├── Worker Process (PID: 1235) [处理客户端请求] 3├── Worker Process (PID: 1236) [处理客户端请求] 4├── Worker Process (PID: 1237) [处理客户端请求] 5├── Cache Loader Process (PID: 1238) [只在启动时出现,用于初始化缓存索引,完成后自动退出] 6└── Cache Manager Process (PID: 1239) [常驻的“后台管家”,定期清理过期缓存]
各进程职责:
- Master 进程:
- 读取和验证配置文件
- 管理 Worker 进程(启动、停止、重载)
- 平滑升级(不中断服务的情况下更新版本)
- Worker 进程:
- 实际处理客户端请求
- 每个进程独立运行,互不干扰
- 采用事件驱动模型,非阻塞处理
- Cache Manager 进程:
- 专职负责缓存的过期与清理,是 Nginx 缓存系统的“后台管家”
2.2 配置骨架:从 http 到 location 的层级关系
Nginx 配置文件采用层次化的**“区块嵌套”**结构,理解这种结构是掌握配置的关键
核心层级为:main(全局)→ events(事件)→ http(HTTP 协议)
→ server(虚拟主机)→ location(请求匹配)。
| 层级 | 上下文 | 作用范围 | 核心作用 |
|---|---|---|---|
| Main | 全局 | 整个 Nginx 实例 | 配置进程、日志、用户等全局参数 |
| Events | events | 网络连接 | 配置最大连接数、连接处理模型,影响性能 |
| HTTP | http | 所有 HTTP/HTTPS 流量 | 配置协议级通用参数(日志、压缩、MIME等) |
| Server | server | 单个虚拟主机(网站) | 基于域名/IP/端口区分不同网站 |
| Location | location | 虚拟主机内的特定 URI | 对请求路径进行最精细化的处理和控制 |
配置层次结构:
1# ==================== 层级1: Main Context (全局配置) ==================== 2worker_processes auto; # 工作进程数,建议设为 CPU 核心数 3error_log /var/log/nginx/error.log warn; # 全局错误日志路径与级别 4pid /run/nginx.pid; # 进程 PID 文件路径 5 6# ==================== 层级2: Events Context (事件配置) ================== 7events { 8 worker_connections 1024; # 每个工作进程的最大连接数 9 use epoll; # Linux 系统推荐使用 epoll 事件模型 10 multi_accept on; # 允许一个连接同时处理多个请求 11} 12 13# ==================== 层级3: HTTP Context (HTTP协议配置) ================ 14http { 15 include /etc/nginx/mime.types; # 引入 MIME 类型映射文件 16 default_type application/octet-stream; # 未知文件类型的默认 Content-Type 17 18 # 定义日志格式 19 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 20 '$status $body_bytes_sent "$http_referer" ' 21 '"$http_user_agent" "$http_x_forwarded_for"'; 22 23 access_log /var/log/nginx/access.log main; # 访问日志路径和格式 24 25 # 性能优化指令 26 sendfile on; # 启用零拷贝传输 27 tcp_nopush on; # 优化数据包发送,减少网络报文 28 tcp_nodelay on; # 禁用 Nagle 算法,降低延迟 29 keepalive_timeout 65; # 客户端连接保持超时时间 30 31 # 启用 Gzip 压缩 32 gzip on; 33 gzip_types text/plain text/css application/json application/javascript; 34 35 # ==================== 层级4: Server Context (虚拟主机配置) ============ 36 server { 37 listen 80; # 监听 80 端口(HTTP) 38 server_name example.com www.example.com; # 绑定的域名 39 40 # 字符集设置,避免中文乱码 41 charset utf-8; 42 43 # ==================== 层级5: Location Context (URI匹配配置) ======= 44 location / { 45 root /var/www/html; # 网站根目录 46 index index.html index.htm; # 默认首页文件 47 } 48 49 # 静态资源缓存优化 50 location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { 51 root /var/www/static; 52 expires 1y; # 缓存 1 年 53 add_header Cache-Control "public, immutable"; 54 } 55 56 # 错误页面配置 57 error_page 404 /404.html; 58 error_page 500 502 503 504 /50x.html; 59 60 location = /50x.html { 61 root /var/www/html; 62 } 63 } 64}
Location 匹配规则详解:
Nginx 的 location 块支持多种匹配方式,优先级从高到低:
1server { 2 # 1. 精确匹配 (=) - 最高优先级 3 location = /exact-path { 4 return 200 "This is an exact match"; 5 } 6 7 # 2. 优先前缀匹配 (^~) - 第二优先级 8 location ^~ /static/ { 9 root /var/www; 10 # 此配置会阻止后续的正则匹配 11 } 12 13 # 3. 正则匹配 (~ 区分大小写, ~* 不区分大小写) 14 location ~ \.php$ { 15 # 处理PHP文件 16 fastcgi_pass 127.0.0.1:9000; 17 } 18 19 location ~* \.(jpg|png|gif)$ { 20 # 处理图片文件,不区分大小写 21 expires 30d; 22 } 23 24 # 4. 普通前缀匹配 - 最低优先级 25 location / { 26 # 通用匹配 27 try_files $uri $uri/ =404; 28 } 29}
2.3 静态资源服务:Nginx 的 "原生强项"
Nginx 在处理静态资源方面具有天然优势,正确的配置可以极大提升性能。
基础静态服务配置:
1server { 2 listen 80; 3 server_name static.example.com; 4 5 # 基础静态文件服务 6 location / { 7 root /var/www/html; # 设置根目录路径 8 index index.html index.htm; # 默认索引文件 9 10 # 性能优化设置 11 sendfile on; # 启用零拷贝传输,绕过用户空间直接在内核处理文件发送 12 tcp_nopush on; # 在sendfile启用时,优化数据包发送,减少网络报文数量 13 14 # 缓存控制 15 expires 1h; # 设置浏览器缓存1小时(HTTP响应头Expires和Cache-Control) 16 add_header Cache-Control "public"; # 允许所有缓存(CDN、代理、浏览器)缓存资源 17 } 18 19 # 图片文件特殊处理 20 location ~* \.(jpg|jpeg|png|gif|ico|webp)$ { 21 root /var/www/images; 22 23 # 更长的缓存时间 24 expires 1y; 25 add_header Cache-Control "public, immutable"; 26 27 # 图片优化 28 image_filter resize 800 600; # 可选:图片处理 29 } 30 31 # CSS和JS文件 32 location ~* \.(css|js)$ { 33 root /var/www/assets; 34 expires 7d; 35 add_header Cache-Control "public"; 36 37 # Gzip压缩 38 gzip on; 39 gzip_types text/css application/javascript; 40 } 41}
高级静态资源优化:
1http { 2 # 文件访问缓存配置(优化静态文件读取性能) 3 # 启用文件描述符缓存,最多缓存10000个文件描述符,30秒内未被访问则移除缓存 4 open_file_cache max=10000 inactive=30s; 5 # 每60秒检查一次缓存中文件的有效性(如是否被修改) 6 open_file_cache_valid 60s; 7 # 一个文件至少被访问2次后才会被缓存(避免缓存低频访问文件) 8 open_file_cache_min_uses 2; 9 # 缓存文件访问错误(如文件不存在、权限问题),避免重复校验错误状态 10 open_file_cache_errors on; 11 12 # Gzip压缩配置(减少网络传输数据量,提升加载速度) 13 gzip on; # 开启Gzip压缩 14 gzip_vary on; # 在响应头中添加Vary: Accept-Encoding,告知客户端支持压缩 15 gzip_min_length 1024; # 仅压缩大小超过1024字节的文件(小文件压缩收益低) 16 # 指定需要压缩的MIME类型(文件类型) 17 gzip_types 18 text/plain # 纯文本 19 text/css # CSS样式表 20 text/xml # XML文档 21 text/javascript # JS脚本(旧标准) 22 application/javascript # JS脚本(新标准) 23 application/xml+rss # RSS订阅XML 24 application/json; # JSON数据 25}
三、关键应用场景:Nginx 实战核心技能
3.1 反向代理:隐藏后端,统一入口
反向代理是 Nginx 最常用的功能之一,它隐藏了后端服务器的细节,提供了统一的访问入口。
基础反向代理配置:
客户端请求 → Nginx (监听80端口) → 根据server_name匹配 → Location / 处理 → 转发到proxy_pass代理的后端服务器组→ upstream 定义后端服务器集群
1 2server { 3 listen 80; 4 server_name example.com; 5 6 location / { 7 # 基本代理设置 8 proxy_pass http://backend_server; 9 10 # 重要的请求头设置(确保后端服务器能获取正确的客户端信息,而不是看到代理服务器的IP) 11 proxy_set_header Host $host; # 保持原始域名 12 proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP 13 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 代理链IP记录 14 proxy_set_header X-Forwarded-Proto $scheme; # 传递原始协议(http/https) 15 16 # 超时设置(防止因后端服务响应慢而阻塞 Nginx 工作进程) 17 proxy_connect_timeout 30s; # 连接后端超时时间 18 proxy_send_timeout 30s; # 发送请求到后端超时时间 19 proxy_read_timeout 30s; # 读取后端响应超时时间 20 21 # 缓冲优化(缓冲后端响应,减少后端服务器连接保持时间,优化对客户端的响应传输,防止快速客户端拖慢慢速后端) 22 proxy_buffering on; 23 proxy_buffer_size 4k; # 响应头缓冲区大小 24 proxy_buffers 8 4k; # 响应体缓冲区(8个4k块) 25 } 26} 27 28# 定义后端服务器组 29upstream backend_server { 30 server 192.168.1.10:8080; 31 server 192.168.1.11:8080; 32}
高级代理配置:
1location /api/ { 2 # 将匹配 /api/ 路径的请求代理到名为 api_backend 的后端服务器组 3 proxy_pass http://api_backend; 4 5 # ====================== 6 # 错误处理与故障转移配置 7 # ====================== 8 9 # 定义在什么情况下应该尝试下一个上游服务器 10 # error: 与后端服务器建立连接、发送请求或读取响应时发生错误 11 # timeout: 与后端服务器连接、发送或读取超时 12 # invalid_header: 后端服务器返回空或无效的响应头 13 # http_500: 后端服务器返回500状态码 14 # http_502: 后端服务器返回502状态码 15 # http_503: 后端服务器返回503状态码 16 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; 17 18 # 指定故障转移的最大重试次数(包括第一次请求) 19 # 这里设置为3次,意味着如果第一个服务器失败,会再尝试另外两个服务器 20 proxy_next_upstream_tries 3; 21 22 # 设置故障转移的超时时间限制 23 # 在30秒内如果没有成功响应,则停止尝试其他服务器并返回错误 24 proxy_next_upstream_timeout 30s; 25 26 # ====================== 27 # 连接池配置(性能优化) 28 # ====================== 29 30 # 设置与每个后端服务器保持的最大空闲keepalive连接数 31 # 保持连接复用可以减少TCP握手开销,提高性能 32 keepalive 32; 33 34 # 设置keepalive连接的最大空闲时间 35 # 超过30秒未使用的连接将被关闭 36 keepalive_timeout 30s; 37 38 # 单个keepalive连接上允许处理的最大请求数 39 # 达到100个请求后连接将被关闭,防止连接老化 40 keepalive_requests 100; 41 42 # ====================== 43 # 超时与重试机制 44 # ====================== 45 46 # 与后端服务器建立连接的超时时间 47 # 如果5秒内无法建立连接,将触发错误处理 48 proxy_connect_timeout 5s; 49 50 # 向后端服务器发送请求的超时时间 51 # 如果10秒内无法发送完所有请求数据,将触发错误处理 52 proxy_send_timeout 10s; 53 54 # 从后端服务器读取响应的超时时间 55 # 如果30秒内没有收到任何数据,将触发错误处理 56 # 对于API接口,这个值通常设置得比连接和发送超时长 57 proxy_read_timeout 30s; 58}
3.2 负载均衡:分摊压力,提升可用
Nginx 提供多种负载均衡算法,可以根据业务需求选择合适的策略。
负载均衡配置示例:
1upstream backend_cluster { 2 # 负载均衡算法 3 least_conn; # 最少连接数算法 4 5 # 服务器定义 6 server 192.168.1.10:8080 weight=3 max_fails=3 fail_timeout=30s; 7 server 192.168.1.11:8080 weight=2 max_fails=3 fail_timeout=30s; 8 server 192.168.1.12:8080 weight=1 max_fails=3 fail_timeout=30s; 9 server 192.168.1.13:8080 backup; # 备份服务器 10} 11 12server { 13 listen 80; 14 server_name app.example.com; 15 16 location / { 17 proxy_pass http://backend_cluster; 18 proxy_set_header Host $host; 19 # 其他代理配置... 20 } 21}
不同负载均衡算法:
1# 1. 轮询(默认) 2upstream round_robin { 3 server backend1.example.com; 4 server backend2.example.com; 5} 6 7# 2. 加权轮询 8upstream weighted_round_robin { 9 server backend1.example.com weight=5; # 处理50%的请求 10 server backend2.example.com weight=3; # 处理30%的请求 11 server backend3.example.com weight=2; # 处理20%的请求 12} 13 14# 3. IP哈希(会话保持) 15upstream ip_hash { 16 ip_hash; # 基于客户端IP的哈希 17 server backend1.example.com; 18 server backend2.example.com; 19} 20 21# 4. 最少连接数 22upstream least_conn { 23 least_conn; 24 server backend1.example.com; 25 server backend2.example.com; 26} 27 28# 5. 基于响应时间的负载均衡(需要商业版) 29upstream response_time { 30 fair; 31 server backend1.example.com; 32 server backend2.example.com; 33}
3.3 动静分离:各司其职,极致性能
动静分离是提升网站性能的重要手段,将动态请求和静态请求分别处理。
完整的动静分离配置:
1upstream dynamic_backend { 2 server 192.168.1.20:8000; 3 server 192.168.1.21:8000; 4} 5 6server { 7 listen 80; 8 server_name www.example.com; 9 10 # 静态资源 - 直接由Nginx处理 11 location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|txt)$ { 12 root /var/www/static; 13 14 # 缓存优化 15 expires 1y; 16 add_header Cache-Control "public, immutable"; 17 18 # 性能优化 19 sendfile on; 20 tcp_nopush on; 21 22 # 如果文件不存在,不代理到后端 23 try_files $uri =404; 24 } 25 26 # 动态请求 - 代理到后端应用服务器 27 location / { 28 proxy_pass http://dynamic_backend; 29 proxy_set_header Host $host; 30 proxy_set_header X-Real-IP $remote_addr; 31 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 32 proxy_set_header X-Forwarded-Proto $scheme; 33 } 34 35 # API请求单独处理 36 location /api/ { 37 proxy_pass http://dynamic_backend; 38 # 特殊的API配置... 39 } 40}
3.4 SSL/TLS 终端代理:打造 HTTPS 安全站点
Nginx 可以作为 SSL/TLS 终端,处理加密连接,减轻后端服务器的负担。
完整的 HTTPS 配置:
1# HTTPS服务器配置 2server { 3 listen 443 ssl http2; # 启用HTTP/2 4 server_name example.com; 5 6 # SSL证书配置 7 ssl_certificate /etc/nginx/ssl/example.com.crt; 8 ssl_certificate_key /etc/nginx/ssl/example.com.key; 9 10 # SSL协议配置 11 ssl_protocols TLSv1.2 TLSv1.3; # 禁用不安全的旧协议 12 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384; 13 ssl_prefer_server_ciphers off; 14 15 # SSL性能优化 16 ssl_session_cache shared:SSL:10m; 17 ssl_session_timeout 10m; 18 ssl_session_tickets off; 19 20 # 安全头设置 21 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; 22 add_header X-Frame-Options "SAMEORIGIN" always; 23 add_header X-Content-Type-Options "nosniff" always; 24 add_header X-XSS-Protection "1; mode=block" always; 25 26 # 应用配置 27 location / { 28 proxy_pass http://backend_server; 29 proxy_set_header Host $host; 30 proxy_set_header X-Forwarded-Proto https; 31 } 32} 33 34# HTTP重定向到HTTPS 35server { 36 listen 80; 37 server_name example.com; 38 return 301 https://$server_name$request_uri; 39}
四、性能优化与安全加固:让 Nginx 更稳更快
4.1 性能调优:从配置到内核的全维度优化
Nginx 配置层优化:
1 2# nginx.conf 中的性能优化配置 3http { 4 # 基础性能设置 5 sendfile on; 6 tcp_nopush on; 7 tcp_nodelay on; 8 keepalive_timeout 65; 9 keepalive_requests 1000; 10 11 # 缓冲优化 12 client_body_buffer_size 128k; 13 client_max_body_size 10m; 14 client_header_buffer_size 1k; 15 large_client_header_buffers 4 4k; 16 17 # Gzip压缩优化 18 gzip on; 19 gzip_min_length 1024; 20 gzip_types 21 text/plain 22 text/css 23 text/xml 24 text/javascript 25 application/javascript 26 application/xml+rss 27 application/json; 28 29 # 文件缓存优化 30 open_file_cache max=10000 inactive=30s; 31 open_file_cache_valid 60s; 32 open_file_cache_min_uses 2; 33 open_file_cache_errors on; 34} 35 36# 事件模块优化 37events { 38 worker_connections 2048; 39 use epoll; 40 multi_accept on; 41}
操作系统层优化:
1# 调整内核参数(/etc/sysctl.conf) 2echo 'net.core.somaxconn = 65535' >> /etc/sysctl.conf 3echo 'net.core.netdev_max_backlog = 65536' >> /etc/sysctl.conf 4echo 'net.ipv4.tcp_max_syn_backlog = 65536' >> /etc/sysctl.conf 5echo 'net.ipv4.tcp_fin_timeout = 30' >> /etc/sysctl.conf 6echo 'net.ipv4.tcp_tw_reuse = 1' >> /etc/sysctl.conf 7echo 'fs.file-max = 100000' >> /etc/sysctl.conf 8 9# 应用配置 10sysctl -p
4.2 安全加固:抵御常见攻击
基础安全配置:
1server { 2 # 隐藏Nginx版本信息 3 server_tokens off; 4 5 # 安全头设置 6 add_header X-Frame-Options "SAMEORIGIN" always; 7 add_header X-Content-Type-Options "nosniff" always; 8 add_header X-XSS-Protection "1; mode=block" always; 9 add_header Referrer-Policy "strict-origin-when-cross-origin" always; 10 11 # 限制请求方法 12 if ($request_method !~ ^(GET|HEAD|POST)$) { 13 return 405; 14 } 15 16 # 防止点击劫持 17 add_header X-Frame-Options "SAMEORIGIN"; 18 19 # 限制文件上传大小 20 client_max_body_size 10m; 21} 22 23# 速率限制防御DDoS 24http { 25 limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s; 26 limit_req_zone $binary_remote_addr zone=login:10m rate=1r/m; 27 28 server { 29 location /api/ { 30 limit_req zone=api burst=20 nodelay; 31 # API配置... 32 } 33 34 location /login { 35 limit_req zone=login burst=5; 36 # 登录配置... 37 } 38 } 39}
高级安全防护:
1# 防止SQL注入和XSS攻击 2server { 3 # 屏蔽敏感文件 4 location ~ /\.(ht|git|svn) { 5 deny all; 6 } 7 8 location ~* \.(bak|config|sql|log)$ { 9 deny all; 10 } 11 12 # 防止图片盗链 13 location ~* \.(jpg|jpeg|png|gif)$ { 14 valid_referers none blocked server_names ~\.google\. ~\.baidu\.; 15 if ($invalid_referer) { 16 return 403; 17 # 或者返回一个默认图片 18 # rewrite ^ /images/blocked.png; 19 } 20 } 21}
五、总结与展望:Nginx 的核心价值与未来
5.1 核心价值总结
通过本文的学习,我们可以看到 Nginx 的核心价值体现在:
- 卓越的性能:事件驱动架构轻松应对高并发场景
- 灵活的配置:模块化设计支持各种复杂业务需求
- 稳定的运行:Master-Worker 进程模型确保服务高可用
- 丰富的生态:大量第三方模块扩展功能边界
5.2 Nginx 与其他技术的对比
| 特性 | Nginx | Apache | Caddy |
|---|---|---|---|
| 性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| 配置复杂度 | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 功能丰富度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 学习曲线 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 社区生态 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
5.3 未来发展趋势
- 云原生支持:Nginx 在 Kubernetes 生态中作为 Ingress Controller 广泛应用
- 边缘计算:作为边缘节点处理计算和缓存任务
- API 网关:功能不断丰富,向全功能 API 网关演进
- 安全增强:集成更多安全功能,如 WAF、Bot 防护等
📚 附录:Nginx 常用工具与资源
常用命令速查
1 2# 测试配置 3nginx -t 4 5# 重新加载配置(不中断服务) 6nginx -s reload 7 8# 重新打开日志文件 9nginx -s reopen 10 11# 优雅停止 12nginx -s quit 13 14
《Nginx 从入门到精通:全面解析与实战指南》 是转载文章,点击查看原文。