从零开始学习Nginx:小白也能轻松掌握的指南

一、Nginx简介

Nginx(发音为“engine X”)是一个轻量级、高性能的Web服务器和反向代理服务器。自2004年发布以来,它凭借高并发、低内存消耗的特点,迅速成为全球最受欢迎的服务器软件之一。
据统计,全球超过40%的高流量网站(如GitHub、Netflix、知乎等)都在使用Nginx。它不仅支持HTTP、HTTPS协议,还能处理TCP/UDP流量,是构建现代应用架构的基石工具


二、Nginx核心概念

1. 正向代理 vs 反向代理

  • 正向代理
    扮演客户端代理的角色,帮助用户访问外部资源。
    应用场景:企业内网的VPN翻墙访问外网,通常正向代理就是我们没有权限或者速率很慢访问某些服务器,通过正向代理服务器代表我们去访问外网,正向代理服务器常常是有能力访问目标服务器。

    <PLAINTEXT>

    用户 → 正向代理 → 互联网 → 目标网站
  • 反向代理
    作为服务端代理,隐藏真实服务器信息,处理客户端请求并返回结果。
    应用场景:通过Nginx将用户请求转发到后端的Java/Python服务。例如:前后端分离开发时,当服务器有多台时端口号有多个,前端可以通过nginx实现反向代理服务器,反向代理服务器暴露给前端唯一端口号,由代理服务器将不同请求转发给相应服务器。

  • <PLAINTEXT>

    用户 → 反向代理(Nginx) → 真实服务器集群

2. 负载均衡

当单台服务器无法承受高并发请求时,Nginx通过负载均衡策略(如轮询、权重、IP Hash)将请求分发到多个服务器,提升应用可用性和稳定性

假如客户端有15个请求,如果这15个请求都交给服务端,服务端的压力就会很大,但是通过nginx反向代理后,将15个请求分别分配给三个服务端,减小并发请求压力,这个过程就叫做负载均衡。

<NGINX>

http {
    upstream backend {
        server 192.168.1.101:8080 weight=3;  # 权重高,处理更多请求
        server 192.168.1.102:8080;
    }
    
    server {
        location / {
            proxy_pass http://backend;
        }
    }
}

以下是Nginx常用的几种负载均衡策略及其适用场景和配置示例:


(1). 轮询(Round Robin)

策略说明
默认策略,按顺序将请求依次分发到不同的后端服务器,实现简单、平均分配。

配置示例

<NGINX>

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
}

适用场景

  • 所有后端服务器性能相近,无需特殊权重。
  • 无会话状态(如静态资源、API接口)。

(2). 加权轮询(Weighted Round Robin)

策略说明
为服务器分配权重,权重高的服务器处理更多请求。权重越大,承担流量比例越高。

配置示例

<NGINX>

upstream backend {
    server backend1.example.com weight=3; # 处理3/4的请求
    server backend2.example.com weight=1; # 处理1/4的请求
}

适用场景

  • 服务器性能差异大(如高配机器需承担更多流量)。
  • 逐步下线服务器时降低权重。

(3). IP哈希(IP Hash)

策略说明
根据客户端IP计算哈希值,固定将同一IP的请求分发到同一后端服务器,实现会话保持。

配置示例

<NGINX>

upstream backend {
    ip_hash;  # 启用IP哈希策略
    server backend1.example.com;
    server backend2.example.com;
}

适用场景

  • 需要会话持久化的应用(如用户登录状态)。
  • 非集群存储的Session场景(如本地Session未共享)。

缺点

  • 服务器增减时会导致部分会话失效。
  • 哈希不均衡时可能造成某台服务器过载。

(4). 最少连接(Least Connections)

策略说明
优先将请求分配给当前活跃连接数最少的服务器,以优化资源利用率。

配置示例

<NGINX>

upstream backend {
    least_conn;  # 启用最少连接策略
    server backend1.example.com;
    server backend2.example.com;
}

适用场景

  • 后端服务器处理请求的时间差异大(如长连接、大文件下载)。
  • 高并发下动态均衡负载。

(5). 响应时间(需Nginx Plus)

策略说明
(仅限Nginx Plus)根据服务器的平均响应时间动态分配请求,优先选择响应快的节点。

配置示例

<NGINX>

upstream backend {
    least_time header;  # 根据响应头计算时间
    server backend1.example.com;
    server backend2.example.com;
}

适用场景

  • 对响应速度敏感的业务(如实时API)。
  • 混合部署不同性能的服务器。

(6). 基于URI的哈希(通用哈希)

策略说明
通过自定义哈希键(如URI、请求参数)固定请求分发路径。适用于缓存优化或分片场景。

配置示例

<NGINX>

upstream backend {
    hash $request_uri consistent;  # 根据URI哈希,consistent为一致性哈希
    server backend1.example.com;
    server backend2.example.com;
}

适用场景

  • 缓存利用率优化(同一URI请求固定到同一服务器)。
  • 分片处理场景(如特定文件类型路由)。

(7). 随机策略(Random)

策略说明
随机选择一个后端服务器,可配合权重使用。适用于简单分发无特殊要求的场景。

配置示例

<NGINX>

upstream backend {
    random;  # 需安装第三方模块(如ngx_http_upstream_random_module)
    server backend1.example.com;
    server backend2.example.com;
}

总结

策略配置指令适用场景优点缺点
轮询默认均衡分配的简单场景无状态、配置简单无法处理性能差异
加权轮询weight性能不均的服务器集群按权重分配流量静态配置,不够动态
IP哈希ip_hash需会话保持的应用保持同一客户端会话服务器增减时影响会话
最少连接least_conn处理时间差异大的长连接场景动态负载均衡可能忽略服务器权重
通用哈希hash缓存优化或分片处理灵活绑定请求特征需要一致性哈希支持

实际使用建议

  1. 无Session需求的API服务 → 轮询/加权轮询。
  2. 需要登录状态的Web应用 → IP哈希 + Redis共享Session。
  3. 大文件下载或长连接 → 最少连接。
  4. 高可用动态负载 → Nginx Plus响应时间策略。

3. 动静分离

为了加快网站的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,加快解析速度。降低单个服务器的压力。

静态资源(HTML/CSS/图片)动态请求(API接口) 分开处理:

  • 静态资源直接由Nginx高效处理(减少后端压力)
  • 动态请求转发至应用服务器(如Tomcat、Node.js)

<NGINX>

server {
    location /static/ {
        root /var/www/html;  # 直接返回静态文件
    }

    location /api/ {
        proxy_pass http://backend_server;  # 转发到Java服务
    }
}

三、Linux系统安装Nginx

1. Ubuntu/CentOS安装步骤

Ubuntu系统

<BASH>

# 更新软件包列表并安装
sudo apt update
sudo apt install nginx -y

# 启动服务并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx

# 访问测试(输出Welcome即成功)
curl http://localhost
CentOS系统

<BASH>

# 添加EPEL仓库并安装
sudo yum install epel-release -y
sudo yum install nginx -y

# 启动服务
sudo systemctl start nginx
sudo firewall-cmd --permanent --add-service=http  # 开放防火墙端口
sudo firewall-cmd --reload

2. 验证安装

<BASH>

nginx -v                  # 查看版本号
systemctl status nginx    # 检查运行状态

四、Nginx常用命令

命令说明
nginx -t检查配置文件语法(排查错误必用)
nginx -s reload平滑重启(不中断服务更新配置)
nginx -s stop立即停止服务
nginx -s quit优雅停止(处理完当前请求)
systemctl restart nginx通过Systemd重启服务(Ubuntu/CentOS)

使用小贴士

  • 每次修改配置文件后,必须执行 nginx -t 验证语法,避免重启失败!
  • -s reload 可在高并发场景下无感更新配置。

五、Nginx配置文件详解

1. 配置文件结构

主配置文件路径:/etc/nginx/nginx.conf
配置文件按层级划分为多个块:

<NGINX>

# 全局块:配置进程、日志等全局参数
user nginx;
worker_processes auto;该值越大,可以支持的并发处理量越多

# Events块:设置网络连接参数,主要影响nginx服务器和用户网络的连接
events {
    worker_connections 1024;  # 每个worker的最大连接数
}

# Http块:主体配置,包含多个server块
http {
    include /etc/nginx/mime.types;

    # Server块:定义虚拟主机(可多个)
    server {
        listen 80;
        server_name localhost;
        
        # Location块:URL路径匹配规则
        location / {
            root /usr/share/nginx/html;
            index index.html;
        }
    }
}

2. 核心配置示例

反向代理设置

<NGINX>

server {
    listen 80;
    server_name api.yourdomain.com;

    location / {
        proxy_pass http://localhost:8080;  # 将请求转发到本地的Java应用
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
静态资源服务器配置

<NGINX>

server {
    listen 80;
    server_name static.yourdomain.com;

    location / {
        root /var/www/static;  # 静态文件存放目录
        autoindex on;          # 开启目录列表(可选)
    }
}

六、总结与学习建议

Nginx是现代Web开发的瑞士军刀,掌握它可以轻松应对高并发、负载均衡、安全防护等需求。学习建议:

  1. 动手实践每个配置案例,观察效果
  2. 结合Wireshark抓包理解代理过程
  3. 延展学习方向:SSL证书配置、Lua脚本扩展、性能调优

示例完整项目可参考:GitHub Nginx配置模板
遇到问题? 欢迎在评论区留言交流,共同成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值