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

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

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


目录

一、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:匹配路径并定义转发/静态规则

示例:

nginx 复制代码
worker_processes auto;

http {
  include       mime.types;
  sendfile      on;

  server {
    listen      80;
    server_name localhost;

    # 静态托管
    location / {
      root   html;
      index  index.html index.htm;
    }
  }
}

四、反向代理与动静分离

nginx 复制代码
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 拼接路径。

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

nginx 复制代码
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

nginx 复制代码
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)。

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

nginx 复制代码
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;
    }
  }
}

八、限流与安全基础

nginx 复制代码
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);
  • 限流是"限量供应",别让黄牛(恶意请求)把座位全占了。
相关推荐
乘云数字DATABUFF1 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--3 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森3 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜4 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB5 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode6 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220707 天前
如何搭建本地yum源(上)
运维
ping某8 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树8810 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠10 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql