Nginx 从入门到实践:反向代理、负载均衡与动静分离

在日常的项目开发与部署过程中,端口映射、请求转发、服务负载均衡等需求十分常见,而 Nginx 作为一款轻量级的 Web 服务器、反向代理服务器,凭借高性能、高并发、配置灵活等特性,成为解决这类问题的首选工具。本文将从实际开发场景出发,详细讲解 Nginx 的核心概念、安装配置及实战应用。

一、为什么需要 Nginx?

在前端项目开发中,我们通常会遇到这样的问题:本地开发的项目需要通过http://manage.powershop.com:8080访问,带端口的访问方式不够优雅,且生产环境中用户习惯直接通过域名(默认 80 端口)访问。此外,在多服务器部署场景下,还需要解决请求分发、静态资源高效访问等问题。

Nginx 的核心能力恰好能解决这些问题:

  • 反向代理:将 80 端口的请求转发到后端应用的指定端口;
  • 负载均衡:将请求分摊到多台后端服务器,提升系统吞吐量;
  • 动静分离:将静态资源(图片、JS、CSS)直接由 Nginx 提供,减轻应用服务器压力。

二、Nginx 核心概念解析

2.1 反向代理

代理服务分为正向代理和反向代理,核心区别在于代理的 "目标对象" 不同:

  • 正向代理:代理客户端(用户)访问外部网络,比如 VPN、NAT,客户端明确知道代理服务器的存在;
  • 反向代理:代理服务器接收外部客户端的请求,转发给内部的应用服务器,再将结果返回给客户端。客户端感知不到代理的存在,仅认为是直接访问代理服务器。

反向代理是 Nginx 最常用的功能,比如将http://manage.powershop.com(80 端口)的请求转发到本地127.0.0.1:8080的前端项目,实现无端口访问。

2.2 负载均衡

当单台应用服务器无法承载高并发请求时,可部署多台服务器组成集群,Nginx 通过负载均衡将请求分摊到不同服务器,避免单台服务器过载。常见的负载均衡策略包括:

  • 轮询(默认):请求按顺序依次分配给不同服务器;
  • weight(权重):为不同服务器设置权重,权重越高,分配到的请求越多;
  • ip_hash:根据客户端 IP 分配服务器,确保同一 IP 始终访问同一服务器,解决 session 共享问题;
  • least_conn:优先分配请求到连接数最少的服务器;
  • fair:按服务器响应时间分配,响应时间越短优先级越高;
  • url_hash:根据请求 URL 分配服务器,相同 URL 定向到同一服务器。

2.3 动静分离

Web 服务器分为应用服务器(如 Tomcat、Jetty)和静态服务器(如 Nginx、Apache),应用服务器擅长处理动态请求(如 JSP、接口),但处理静态资源(图片、CSS、JS)的效率远低于静态服务器。

动静分离即:将静态资源部署在 Nginx 服务器,动态请求转发到应用服务器,大幅提升资源访问效率。

三、Nginx 安装(Linux 环境)

3.1 安装依赖库

Nginx 编译依赖 gcc、pcre、zlib、openssl 等库,执行以下命令安装:

shell:

复制代码
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

3.2 下载并解压 Nginx

从 Nginx 官网(http://nginx.org/)下载稳定版安装包,解压到指定目录:

shell:

复制代码
# 解压安装包(以1.10.0版本为例)
tar -zxvf nginx-1.10.0.tar.gz
cd nginx-1.10.0

3.3 配置并编译安装

指定安装目录(如/usr/local/nginx),执行配置、编译和安装:

shell:

复制代码
# 配置安装路径
./configure --prefix=/usr/local/nginx
# 编译并安装
make && make install

3.4 Nginx 目录结构

安装完成后,目录结构如下(核心目录):

plaintext:

复制代码
/usr/local/nginx/
├── conf          # 所有配置文件目录,核心为nginx.conf
├── html          # 默认静态资源目录(含index.html、50x.html)
├── logs          # 日志目录(access.log访问日志、error.log错误日志)
├── sbin          # 可执行文件目录(nginx启动/停止命令)

四、Nginx 基本操作

4.1 启动 Nginx

进入sbin目录,执行启动命令:

shell:

复制代码
cd /usr/local/nginx/sbin
./nginx

启动后可通过curl http://localhost测试,返回 Nginx 默认页面即启动成功。

4.2 关闭 Nginx

shell:

复制代码
# 强制停止
./nginx -s stop
# 优雅停止(处理完当前请求后停止)
./nginx -s quit

4.3 重载配置文件

修改配置文件后,无需重启 Nginx,直接重载即可:

shell:

复制代码
./nginx -s reload

五、Nginx 核心配置实战

Nginx 的核心配置文件为/usr/local/nginx/conf/nginx.conf,以下是常见场景的配置示例。

5.1 反向代理:域名转发到指定端口

需求:将manage.powershop.com(80 端口)的请求转发到本地127.0.0.1:8080的前端项目。

nginx.conf:

复制代码
worker_processes  1; # 工作进程数,建议等于CPU核心数
events {
    worker_connections  1024; # 单个进程最大连接数
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on; # 开启高效文件传输模式
    keepalive_timeout  65; # 连接超时时间

    server {
        listen       80; # 监听80端口
        server_name  manage.powershop.com; # 监听的域名

        # 设置请求头
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # 所有请求转发到8080端口
        location / {
            proxy_pass http://127.0.0.1:8080; # 反向代理地址
            proxy_connect_timeout 600; # 连接超时时间
            proxy_read_timeout 600; # 读取超时时间
        }
    }
}

5.2 负载均衡:代理多台 Tomcat 服务器

需求:将请求分摊到两台 Tomcat 服务器(127.0.0.1:8080和127.0.0.1:8081)。

nginx.conf:

复制代码
http {
    # 定义后端服务器集群
    upstream tomcat_cluster {
        server 127.0.0.1:8080 weight=2; # 权重2,分配更多请求
        server 127.0.0.1:8081 weight=1; # 权重1
        ip_hash; # 同一IP固定访问同一服务器,解决session问题
    }

    server {
        listen 80;
        server_name  manage.powershop.com;

        location / {
            proxy_pass http://tomcat_cluster; # 转发到集群
            proxy_connect_timeout 600;
            proxy_read_timeout 600;
        }
    }
}

5.3 动静分离:静态资源由 Nginx 直接提供

需求:所有图片请求(.gif/.jpg/.png/.jpeg)直接访问 Nginx 的/usr/upload/images目录,无需转发到应用服务器。

nginx.conf:

复制代码
server {
    listen 80;
    server_name  manage.powershop.com;

    # 静态资源匹配规则
    location ~* \.(gif|jpg|png|jpeg)$ {
        root /usr/upload/images; # 静态资源根目录
        expires 30d; # 设置缓存时间,减轻服务器压力
    }

    # 动态请求转发到Tomcat
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
    }
}

六、Windows 环境快速使用 Nginx

开发阶段可直接使用 Windows 版 Nginx(免安装):

  1. 下载 Windows 版 Nginx 解压到本地;
  2. 修改conf/nginx.conf配置(同 Linux);
  3. 启动 Nginx:双击解压目录下的nginx.exe,或在命令行执行nginx.exe;
  4. 停止 Nginx:命令行执行nginx.exe -s stop;
  5. 重载配置:nginx.exe -s reload。

七、总结

Nginx 作为高性能的反向代理服务器,核心价值体现在反向代理、负载均衡和动静分离三个方面:

  • 反向代理解决域名与端口映射问题,实现优雅的域名访问;
  • 负载均衡提升系统并发能力,避免单服务器瓶颈;
  • 动静分离优化资源访问效率,减轻应用服务器压力。

掌握 Nginx 的核心配置和常用操作,能大幅提升项目部署的灵活性和系统性能,是后端开发、运维工程师必备的技能之一。

相关推荐
姜鱼问生10 小时前
每次开机手动检查 6 样东西?我写了个 2 秒自检脚本
运维·网络·nginx·docker·容器
我不会起名字32220 小时前
负载均衡选错:轮询在长连接下的偏斜问题
微服务·负载均衡·grpc·长连接
xixingzhe21 天前
Nginx 看懂请求耗时瓶颈
服务器·前端·nginx
北风toto2 天前
Windows 下用 OpenSSL 生成 SSL 密钥并配置 Nginx 教程
windows·nginx·ssl
。2 天前
【无标题】
linux·服务器·负载均衡·lvs
卜锦元2 天前
Docker Compose 部署 Nginx 1.30.6 完整指南
nginx·docker·容器
小小龙学IT2 天前
Nginx 开源 Web 服务器与反向代理深度解
前端·nginx·开源
果霸大叔2 天前
AI网关第8篇:AI 代理与负载均衡--多模型实例如何调度?
人工智能·算法·自然语言处理·负载均衡·ai-native
Coisinier2 天前
docker命令管理镜像及容器
linux·运维·nginx·docker·容器·操作系统
2301_32241428043 天前
基于web的校园失物招领管理系统59695-计算机毕设 原创(免费领源码+部署教程+开发环境)
mysql·nginx·php·apache·thinkphp·phpstudy·wampserver