随着业务流量不断增长,单台服务器往往难以承受高并发访问的压力。此时,我们需要多台服务器共同承担负载,但随之而来的 Session 统一、请求分发等问题也需要解决。

Nginx 正是解决这些问题的利器。它是一款高性能的 HTTP 和反向代理 Web 服务器,占用内存极小(约1MB),却能支持高达 5万个并发连接

正如业界所说:“没有什么是加一层解决不了的,如果有,就再加一层。”


第一章:核心概念

1. Nginx 概述

  • 当访问量增大,单台服务器无法承受时,需要引入多台服务器。

  • 多台服务器需要统一管理 Session 和请求分发。

  • Nginx 作为中间层,起到代理和调度作用。

  • 它支持反向代理和负载均衡,能够根据服务器性能(如内存大小)合理分配请求。

特点:轻量、高并发、配置灵活。

2. 正向代理 vs 反向代理

正向代理
  • 代理对象:客户端

  • 典型场景:访问特定网络资源的中间代理服务

  • 流程示意客户端1/2/3 ---> 代理服务器 ---> 外部服务器

反向代理
  • 代理对象:服务器端

  • 典型场景:Nginx 代理后端多台应用服务器

  • 流程示意客户端 ---> 云服务器(Nginx) ---> 后端服务器1/2/3

区别总结:正向代理隐藏客户端,反向代理隐藏服务端。

3. 负载均衡策略

策略 说明
轮询 请求轮流分发到每台服务器
加权轮询 按权重比例分发,权重越高,接收请求越多
IP Hash 根据客户端 IP 的哈希值分配服务器
动静分离 静态资源(如图片、CSS)由 Nginx 直接返回,不经过后端

生产环境建议:Session 共享更多依赖 Redis 等分布式缓存,而非单纯依赖 IP Hash。


第二章:安装与常用命令

4. Nginx 安装

Windows 安装
  1. 下载解压,例如:C:\IT\Nginx\nginx-1.22.1

  2. 双击 nginx.exe 启动

  3. 访问 http://localhost 验证

bash

cd C:\IT\Nginx\nginx-1.22.1
nginx.exe
Linux 安装(CentOS / RHEL)

1. 安装依赖:

bash

yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

2. 下载并解压:

bash

wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -xvf nginx-1.13.7.tar.gz
cd nginx-1.13.7

3. 编译安装:

bash

./configure
make
make install

注意:若编译报错 ngx_user.c 或 -Werror,可分别注释相关行或删除 -Werror 参数。

4. 启动与管理:

bash

cd /usr/local/nginx/sbin
./nginx            # 启动
./nginx -s stop    # 停止
./nginx -s reload  # 重载配置

5. 设置开机自启:

bash

echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
chmod +x /etc/rc.local

6. 查看进程:

bash

ps -ef | grep nginx

5. 常用命令与配置

配置文件位置:

bash

vim /usr/local/nginx/conf/nginx.conf

常见排错:

  • 错误信息unknown directive ""

  • 解决方案:使用 Notepad++ 将文件转为 UTF-8 无 BOM 格式。

基础配置结构:

nginx

user root;
worker_processes 1;

events {
    worker_connections 1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile      on;
    keepalive_timeout 65;

    server {
        listen 80;
        server_name localhost;

        location / {
            root /root/site/dist;
            index index.html;
            try_files $uri $uri/ /index.html;
        }
    }
}

第三章:实战总结

6. 负载均衡实战

环境准备
  • Linux 服务器 IP:192.168.0.105

  • 启动两个 Spring Boot 服务,分别监听 9001 和 9002 端口

配置负载均衡

nginx

upstream myapp {
    server 192.168.0.105:9001 weight=1;
    server 192.168.0.105:9002 weight=2;
}

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://myapp;
    }
}

权重说明weight=2 的服务器接收的请求量是 weight=1 的两倍,适合根据服务器性能(如 64G 内存 vs 8G 内存)进行合理分配。

重载配置:

bash

cd /usr/local/nginx/sbin
./nginx -s reload

测试效果:访问 http://192.168.0.105/port,会交替显示 9001 和 9002,且权重高的端口出现频率更高。

支持域名与外网 IP

Nginx 的 upstream 不仅支持内网 IP,也支持公网 IP 和域名,配置非常灵活:

nginx

upstream myapp {
    server 192.168.0.105:9001 weight=1;
    server wdfgdzx.top:8080 weight=3;   # 支持域名配置
}

7. 前端项目部署

步骤概览
  1. 前端打包

    bash

    npm run build

    生成 dist 目录

  2. 上传文件:将 dist 上传到服务器,例如:/root/site/UserInterface/dist

  3. 配置 Nginx

nginx

user root;

server {
    listen 80;
    server_name localhost;

    location / {
        root /root/site/UserInterface/dist;
        index index.html;
        try_files $uri $uri/ /index.html;
    }
}
  1. 重载 Nginx

bash

cd /usr/local/nginx/sbin
./nginx -s reload

技术要点try_files $uri $uri/ /index.html 用于支持 Vue/React 等前端路由的 History 模式,解决刷新页面404的问题。


小结

通过本篇文章,我们学习了:

  • Nginx 的基本概念及正向/反向代理的区别

  • 常见的负载均衡策略与适用场景

  • Nginx 在 Windows 和 Linux 下的安装与基本命令

  • 实战配置负载均衡、反向代理及前端项目部署

Nginx 是一个极其强大且轻量的工具,掌握它对后端开发、运维及架构设计都大有裨益。

进阶思考:如何结合 Keepalived 实现 Nginx 高可用?如何配置 HTTPS 与 HTTP 重定向?欢迎继续探索!

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐