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:8080127.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 的核心配置和常用操作,能大幅提升项目部署的灵活性和系统性能,是后端开发、运维工程师必备的技能之一。

相关推荐
StackNoOverflow3 小时前
Nginx 入门教程(安装、反向代理、负载均衡、动静分离)
运维·nginx·负载均衡
鬼蛟4 小时前
Nginx
运维·nginx
A-刘晨阳7 小时前
K8s之负载均衡
linux·运维·容器·kubernetes·负载均衡
网络笨猪19 小时前
# Nginx企业级全套配置\+排错手册
运维·nginx
Junsir大斗师20 小时前
Nginx服务器代理Postgresql-16后端数据库
数据库·nginx
2301_816374331 天前
Nginx下构建PC站点
java·运维·nginx
网络笨猪1 天前
Nginx企业级高频场景配置大全
运维·nginx
庞轩px1 天前
第七篇:大模型API调用——从Token到流式输出
websocket·nginx·大模型·token·sse·流式输出·api密钥
庞轩px2 天前
大模型推理网关——从负载均衡到故障注入的完整设计
网关·大模型·负载均衡·webflux·token限流·api密钥