Nginx 入门教程:从安装到配置反向代理与负载均衡

Nginx 入门教程:从安装到配置反向代理与负载均衡

1. 什么是 Nginx?

Nginx 是一个高性能的 HTTP 服务器反向代理服务器,同时也可以作为邮件代理服务器。它的特点包括:

  • 高并发,低内存消耗(采用异步非阻塞事件驱动模型)
  • 热部署(不中断服务即可升级配置或可执行文件)
  • 丰富的功能:负载均衡、静态文件服务、缓存、SSL/TLS 支持等

适用场景:静态网站托管、API 网关、负载均衡器、反向代理缓存。


2. Nginx 请求处理流程

下面用一张流程图展示 Nginx 接收到客户端请求后的核心处理路径:
HTTP 请求
解析配置
静态文件
代理转发
重定向
客户端
Nginx 主进程
匹配 location 块
返回本地文件

如 HTML/CSS/JS/图片
反向代理到

后端服务器群
返回 3xx 重定向
Upstream 负载均衡
后端服务器 1
后端服务器 2
接收响应

解释

  • Nginx 根据请求的 URL 匹配 location 规则;
  • 如果是静态文件请求,直接返回本地磁盘文件;
  • 如果是动态请求,则反向代理至一组后端服务器(如 Node.js、Java、Python 应用);
  • 支持负载均衡策略(轮询、最少连接、IP Hash 等)。

3. 安装 Nginx

3.1 在 Ubuntu/Debian 上安装

bash 复制代码
sudo apt update
sudo apt install nginx -y

3.2 在 CentOS / RHEL 上安装

bash 复制代码
sudo yum install epel-release -y
sudo yum install nginx -y

3.3 在 macOS 上安装

bash 复制代码
brew install nginx

3.4 验证安装

bash 复制代码
nginx -v          # 显示版本号
sudo systemctl start nginx   # 启动(Linux systemd)

浏览器访问 http://你的服务器IP,看到 Welcome to nginx 页面即成功。


4. Nginx 配置文件结构

主配置文件路径:/etc/nginx/nginx.conf(Linux)或 /usr/local/etc/nginx/nginx.conf(macOS)。

典型的配置文件层次结构:
包含
包含
http块
nginx.conf
conf.d/ *.conf
sites-enabled/*.conf
HTTP 配置块
server 块 - 虚拟主机
location /
location /api

核心配置块说明

作用
events 配置工作进程连接数、事件模型
http 所有 HTTP 相关配置的顶层容器
server 定义一个虚拟主机(类似 Apache 的 VirtualHost)
location 匹配特定 URL 路径,并定义处理方式

5. 第一个配置:托管静态网站

假设你的静态文件放在 /var/www/mysite,目录结构:

复制代码
/var/www/mysite/
├── index.html
├── css/
└── images/

编辑 /etc/nginx/sites-available/default 或新建一个配置文件 /etc/nginx/conf.d/mysite.conf

nginx 复制代码
server {
    listen 80;                     # 监听端口
    server_name example.com;       # 域名(本地测试可改为 localhost)
    root /var/www/mysite;          # 静态文件根目录
    index index.html;              # 默认首页文件

    location / {
        try_files $uri $uri/ =404; # 尝试直接返回文件,否则 404
    }
}

测试配置并重载:

bash 复制代码
sudo nginx -t          # 语法检查
sudo systemctl reload nginx

访问 http://example.com 即可看到 index.html 内容。


6. 反向代理配置

什么是反向代理?

客户端请求 Nginx,Nginx 将请求转发给内部的一个或多个后端服务器,再将后端响应返回给客户端。后端服务器对客户端不可见。

典型场景:前端 Nginx 代理后端 Node.js(运行在 3000 端口)。

nginx 复制代码
server {
    listen 80;
    server_name api.myapp.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

常用代理参数解释:

  • proxy_pass:转发目标地址
  • proxy_set_header:修改转发请求的头部,保证后端获取真实 IP、协议等

7. 负载均衡

需求:同一个应用部署在多台服务器上(如 3 个 Node.js 实例),Nginx 作为入口将流量分发。

nginx 复制代码
upstream backend_servers {
    # 负载均衡策略默认为轮询(round-robin)
    server 192.168.1.10:3000 weight=3;   # weight 越大权重越高
    server 192.168.1.11:3000;
    server 192.168.1.12:3000 backup;     # 备份服务器,平时不转发
}

server {
    listen 80;
    server_name loadbalance.demo.com;

    location / {
        proxy_pass http://backend_servers;
        proxy_set_header Host $host;
    }
}

支持的负载均衡算法

  • 轮询(默认)
  • least_conn:最少连接数
  • ip_hash:同一客户端 IP 固定到同一台后端(解决 session 问题)
  • hash:自定义 key 哈希

8. HTTPS 配置(SSL/TLS)

假设你已经通过 Let's Encrypt 获得证书文件(fullchain.pemprivkey.pem),或使用自签名证书。

nginx 复制代码
server {
    listen 443 ssl http2;
    server_name secure.example.com;

    ssl_certificate     /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        root /var/www/secure_site;
        index index.html;
    }
}

# 强制将 HTTP 重定向到 HTTPS
server {
    listen 80;
    server_name secure.example.com;
    return 301 https://$host$request_uri;
}

验证配置并重载,用 https:// 访问测试。


9. 常用运维命令

命令 作用
nginx -t 检查配置文件语法是否正确
nginx -s reload 平滑重载配置(不中断请求)
nginx -s stop 快速停止
nginx -s quit 优雅停止(处理完当前请求再退出)
systemctl restart nginx 重启服务(会短暂中断,慎用)
tail -f /var/log/nginx/access.log 实时查看访问日志
tail -f /var/log/nginx/error.log 实时查看错误日志

10. 完整示例:动静分离 + 负载均衡

假设:

  • 所有静态资源(/static/*)由 Nginx 直接返回
  • 动态请求(/api/*)转发给后端负载均衡组
nginx 复制代码
upstream api_servers {
    least_conn;
    server 10.0.1.10:8080;
    server 10.0.1.11:8080;
}

server {
    listen 80;
    server_name www.myapp.com;

    # 静态资源
    location /static/ {
        root /var/www/myapp;
        expires 30d;          # 缓存30天
        add_header Cache-Control "public, immutable";
    }

    # 动态 API
    location /api/ {
        proxy_pass http://api_servers;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # 首页
    location / {
        root /var/www/myapp;
        index index.html;
    }
}

11. 排错小技巧

  1. 403 Forbidden :检查用户权限(Nginx 工作进程用户如 www-data 是否有读取文件权限);或者索引文件缺失。
  2. 502 Bad Gateway :后端代理服务未启动或网络不通,检查 proxy_pass 地址。
  3. 404 Not Foundroot 路径错误或 location 匹配规则不正确。
  4. 无法看到修改生效 :执行 nginx -t 检查语法,然后 nginx -s reload;若仍不生效,检查浏览器缓存。

结语

通过本教程你应该已经掌握了 Nginx 的核心概念和常用配置。Nginx 非常强大,还可以深入学习 限流、缓存、gzip压缩、安全头配置、WebSocket 代理 等高级主题。建议在自己的虚拟机或云服务器上动手实践,配合 curl -v 和日志分析,会理解得更深刻。

相关推荐
Elon ¿2 小时前
银河麒麟Server V10 部署NFS服务器及Windows客户端连接
运维·服务器
小夏子_riotous2 小时前
Docker学习路径——7、Docker搭建MySQL 主从复制
linux·运维·mysql·docker·容器·centos·云计算
liyinchi19882 小时前
Windows Server 部署Docker Engine
运维·docker·容器
万岳科技系统开发2 小时前
私域直播系统直播间高并发访问的负载均衡方案
运维·负载均衡
MinterFusion2 小时前
如果openKylin 2.0 SP2主机的IPv4地址改变,如何让GitLab正常运行
运维·gitlab·系统配置·系统维护·明德融创
郝开2 小时前
Docker Compose 本地环境搭建:.env 统一配置模板
运维·docker·容器
IMPYLH2 小时前
Linux 的 sleep 命令
linux·运维·服务器·bash
天空属于哈夫克32 小时前
企微自动化:API接口的私有化部署架构
运维·架构·自动化
嵌入式×边缘AI:打怪升级日志2 小时前
DHT11 驱动开发实录:从零搭建 Linux 字符设备驱动框架(保姆级教学)
linux·运维·驱动开发