当前位置: 首页 > news >正文

Nginx 从入门到进阶:反向代理、负载均衡与高性能实战指南

Nginx 从入门到进阶:反向代理、负载均衡与高性能实战指南

面向小白的由浅入深教程:5 分钟跑起来,30 分钟玩转常见场景,进一步掌握 HTTPS、缓存压缩、限流与排错思路。


目录

  • Nginx 从入门到进阶:反向代理、负载均衡与高性能实战指南
    • 一、Nginx 是什么?
    • 二、快速开始(本地最小可用)
    • 三、核心配置结构速览
    • 四、反向代理与动静分离
    • 五、负载均衡(轮询/权重/健康检查)
    • 六、HTTPS 与 HTTP/2
    • 七、性能优化:缓存与压缩
    • 八、限流与安全基础
    • 九、日志与排错
    • 十、实践清单(建议)
    • 彩蛋:梗版总结(轻松读法)

一、Nginx 是什么?

  • 一个高性能的 Web 服务器与反向代理,擅长并发连接与静态资源分发。
  • 常用场景:静态托管、反向代理、负载均衡、SSL 终止、动静分离、网关限流与安全加固。

二、快速开始(本地最小可用)

  • 安装(Windows/Mac/Linux 按官方文档或包管理器)。
  • 启动与验证:
    • 运行 nginx(或 brew services start nginx
    • 访问 http://localhost 看到欢迎页即成功。
  • 常见命令:nginx -t(测试配置)、nginx -s reload(热加载)、nginx -v(版本)。

三、核心配置结构速览

Nginx 的主配置通常位于 nginx.conf,常见块:

  • events:连接与并发参数
  • http:Web 相关配置(包含多个 server
  • server:一个虚拟主机(域名/端口)
  • location:匹配路径并定义转发/静态规则

示例:

worker_processes auto;http {include       mime.types;sendfile      on;server {listen      80;server_name localhost;# 静态托管location / {root   html;index  index.html index.htm;}}
}

四、反向代理与动静分离

http {upstream app_pool {server 127.0.0.1:3000;}server {listen 80;server_name example.com;# 动态请求转发给后端location /api/ {proxy_pass http://app_pool/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}# 静态资源本地分发location /assets/ {alias /var/www/assets/;access_log off;expires 7d;}}
}

要点:

  • proxy_pass 目标要以 / 结尾时会影响路径拼接方式;保持与 location 一致更直观。
  • aliasroot 区别:alias 替换整个匹配段,root 拼接路径。

五、负载均衡(轮询/权重/健康检查)

upstream app_pool {# 默认轮询server 10.0.0.11:3000 weight=2;server 10.0.0.12:3000 weight=1;# 可选:ip_hash; least_conn;(按需启用)
}server {listen 80;location / {proxy_pass http://app_pool;}
}
  • 策略:默认轮询、ip_hash(会话亲和)、least_conn(最少连接)。
  • 健康检查:开源模块或在上游层面(如 Kubernetes/Consul)完成,更可靠。

六、HTTPS 与 HTTP/2

server {listen 443 ssl http2;server_name example.com;ssl_certificate     /etc/nginx/ssl/fullchain.pem;ssl_certificate_key /etc/nginx/ssl/privkey.pem;add_header Strict-Transport-Security "max-age=31536000" always;location / {proxy_pass http://app_pool;}
}# 80 跳转到 443
server {listen 80;server_name example.com;return 301 https://$host$request_uri;
}

要点:

  • 使用可信证书;启用 http2 获取多路复用与头部压缩收益。
  • 建议加 HSTS 与安全响应头;证书自动化可用 ACME(Let’s Encrypt)。

七、性能优化:缓存与压缩

http {# Gzip 压缩gzip on;gzip_types text/plain text/css application/javascript application/json image/svg+xml;gzip_min_length 1024;server {# 静态资源强缓存location /assets/ {alias /var/www/assets/;expires 30d;add_header Cache-Control "public, max-age=2592000, immutable";}# 反向代理缓存(示例)proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mycache:10m max_size=1g inactive=60m use_temp_path=off;location /api/cacheable/ {proxy_cache mycache;proxy_cache_valid 200 10m;add_header X-Cache-Status $upstream_cache_status;proxy_pass http://app_pool;}}
}

八、限流与安全基础

http {# 基于 IP 的简单限流limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;server {location /api/ {limit_req zone=perip burst=20 nodelay;proxy_pass http://app_pool;}# 基础安全头add_header X-Content-Type-Options nosniff;add_header X-Frame-Options DENY;add_header Referrer-Policy no-referrer;}
}

九、日志与排错

  • 测试配置:nginx -t;查看错误日志 error.log 与访问日志 access.log
  • 常见问题:
    • 502/504:后端不通或超时,检查上游健康与超时设置(proxy_read_timeout)。
    • 路径拼接错:确认 locationproxy_pass 尾部斜杠匹配。
    • 权限问题:静态目录与证书文件的读权限。

十、实践清单(建议)

  • 搭建一个静态站点与一个后端服务,完成动静分离。
  • /api/ 配置负载均衡与简单限流,验证高并发下表现。
  • 启用 HTTPS/HTTP2 与 Gzip,观察带宽与 TTFB 改善。
  • 打开代理缓存,给可缓存的 GET 接口加速。

彩蛋:梗版总结(轻松读法)

  • 把 Nginx 当“前台小管家”:看门(监听端口)、带客(反向代理)、分座(负载均衡)、发扇子(压缩)、送冰阔落(缓存)。
  • location 像“区域导览牌”,别把 aliasroot 搞反,不然客人迷路;
  • proxy_pass 末尾斜杠像“门缝”,开大开小影响你鞋是不是被卡住(路径拼接);
  • 502/504 就像后厨断电或上菜太慢,先查电闸(上游)再看计时器(超时)。
  • HTTPS 像给餐厅装玻璃门:看得见更安全,还更快(HTTP/2);
  • 限流是“限量供应”,别让黄牛(恶意请求)把座位全占了。

文章转载自:

http://lM3NfjwB.txLxr.cn
http://V9l788Xs.txLxr.cn
http://AYAfUv2R.txLxr.cn
http://doezW2Xm.txLxr.cn
http://AOqu1mLj.txLxr.cn
http://zbjjZqVI.txLxr.cn
http://WRIPvYu1.txLxr.cn
http://6krFJPoU.txLxr.cn
http://jDaVE9zb.txLxr.cn
http://XGMAmo5H.txLxr.cn
http://76cqJof7.txLxr.cn
http://ISGzy7J4.txLxr.cn
http://wogB0tRs.txLxr.cn
http://cwFVJGm9.txLxr.cn
http://d7peoUtZ.txLxr.cn
http://UQy0hbRq.txLxr.cn
http://5J2SyexH.txLxr.cn
http://34fpbejC.txLxr.cn
http://m4nh4Vz0.txLxr.cn
http://OPZQ6G3b.txLxr.cn
http://buJ5ZuFh.txLxr.cn
http://Kc20B8nf.txLxr.cn
http://oKaXV3jd.txLxr.cn
http://5apjwLld.txLxr.cn
http://1YFhRizQ.txLxr.cn
http://dHISUNBc.txLxr.cn
http://EFZgCMjX.txLxr.cn
http://BAtp3evo.txLxr.cn
http://siEs8F0Q.txLxr.cn
http://Rhq7nBOk.txLxr.cn
http://www.dtcms.com/a/384544.html

相关文章:

  • 微服务-nacos服务中心
  • uniApp开发XR-Frame微信小程序 | 动态加载与删除模型
  • AR 巡检在工业的应用|阿法龙XR云平台
  • eureka微服务注册问题
  • 【LangChain指南】大语言模型(LLMs)
  • 一台设备管理多个 GitHub 账号:从配置到切换的完整指南
  • K - 近邻(KNN)算法:基于约会数据集的分类任务全流程
  • 机器学习实战第四章 线性回归
  • 概率统计面试题2:随机抛掷两点到圆心距离较小值的期望
  • 什么是 OFDM?它如何解决频率选择性衰落?
  • 第一部分:VTK基础入门(第3章:VTK架构与核心概念)
  • 基于深度学习的中文方言识别模型训练实战
  • 【机器学习】用Anaconda安装学习环境
  • 【C语言】C语言内存存储底层原理:整数补码、浮点数IEEE754与大小端(数据内存存储的深度原理与实践)
  • MongoDB - 连接
  • 【Day 57】Linux-Redis
  • Go语言爬虫:爬虫入门
  • HarmonyOS图表组件库对比:UCharts、VChart、Omni-UI、mcCharts
  • 生活中的花花草草和各色人物
  • HTML属性和值
  • 【STL库】unordered_map/unordered_set 类学习
  • 学习threejs,使用自定义GLSL 着色器,实现水面、粒子特效
  • 机器学习-第二章
  • 贪心算法在SDN流表优化中的应用
  • 植物1区TOP——GWAS eQTL如何精准定位调控棉花衣分的候选基因
  • iOS 灵动岛 ActivityKit 开发实践
  • JVM 垃圾收集器
  • 学习日记-XML-day55-9.14
  • SenseVoice + WebRTC:打造行业级实时语音识别系统的底层原理与架构设计
  • C++ 异常机制深度解析:从原理到实战的完整指南