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);
  • 限流是"限量供应",别让黄牛(恶意请求)把座位全占了。
相关推荐
Yyyy4822 小时前
Nginx负载均衡集群实验步骤
运维·nginx·负载均衡
獭.獭.3 小时前
Linux -- 信号【上】
linux·运维·服务器
hashiqimiya4 小时前
centos配置环境变量jdk
linux·运维·centos
路由侠内网穿透5 小时前
本地部署 GPS 跟踪系统 Traccar 并实现外部访问
运维·服务器·网络·windows·tcp/ip
傻傻虎虎7 小时前
【Docker】常用帮忙、镜像、容器、其他命令合集(2)
运维·docker·容器
ZERO_pan8 小时前
服务器装机遇到的问题
运维·服务器
杀气丶8 小时前
Linux下运行芙蕾雅天堂2【俄文简译L2FATER】
运维·服务器·天堂2·l2fater·l2fater.cn
太空的旅行者9 小时前
告别双系统——WSL2+UBUNTU在WIN上畅游LINUX
linux·运维·ubuntu
九章云极AladdinEdu10 小时前
超参数自动化调优指南:Optuna vs. Ray Tune 对比评测
运维·人工智能·深度学习·ai·自动化·gpu算力