Nginx代理服务器完整教程之反向代理、负载均衡、动静分离实战

 更新时间:2026年10月31日 11:52:27   作者:m0_63990694  
本文系统讲解Nginx作为反向代理服务器和负载均衡器的核心应用,涵盖Nginx配置结构(main、events、http、server、location)、反向代理原理与配置、5种负载均衡策略(轮询、weight、ip_hash、least_conn、fair),以及动静分离最佳实践,感兴趣的朋友跟随小编一起看看吧

一、Nginx概述

1.1 什么是Nginx

Nginx是俄罗斯开发者 Igor Sysoev 开发的高性能HTTP服务器、反向代理服务器,也支持IMAP/POP3邮件代理。 官方测试可支撑5万并发连接,CPU、内存占用极低,稳定性强。

区分:

  • Nginx:擅长静态资源,反向代理;本身不能运行Java动态web项目
  • Tomcat:Java动态Web容器,可以运行Servlet、JSP动态项目。

1.2 Nginx四大应用场景

  1. HTTP静态服务器:直接托管html、css、js、图片等静态资源。
  2. 虚拟主机:一台物理服务器,配置多个域名/端口,对外提供多个独立网站。
  3. 反向代理 + 负载均衡:请求转发后端Tomcat集群,分摊流量,提升并发与可用性。
  4. 解决前后端跨域、动静分离。

最佳实践:动静分离

将静态资源(图片、js、css)交给Nginx直接返回;动态请求(接口、业务逻辑)反向代理转发给Tomcat等后端服务。

好处:

  1. 减轻后端容器压力,提升响应速度;
  2. 动态服务宕机,静态页面依然可以正常访问。

二、Nginx安装、目录与基础命令

2.1 下载

官网地址:nginx: download

Windows版本直接解压即可,解压路径不要带中文、空格。

2.2 核心目录详解

2.3 常用命令(cmd进入nginx根目录执行)

nginx -t        # 检查配置文件语法是否正确,修改配置必执行
start nginx     # 启动nginx
nginx -s stop   # 快速停止nginx
nginx -s reload # 平滑重启,加载新配置(不中断现有连接)

启动成功后,可以通过浏览器输入:http://localhost 或者 http://localhost:80 来验证是否成功。

三、nginx.conf配置文件详解

整体四层结构:

main{          # 全局块
	http{        # http块
		upstream{} # 负载均衡后端服务池
		server{   # 虚拟主机,一个server代表一个网站
			location{} # url匹配,请求转发规则
		}
	}
}

关系:server继承main,location继承server;upstream独立,不继承任何配置。

① main全局块

worker_processes  1;        # worker进程数,建议等于CPU核心数
error_log  logs/error.log;  # 全局错误日志
pid        logs/nginx.pid;  # pid文件位置

② events块:网络模型

events {
    worker_connections  1024; # 单个worker最大并发连接数,建议10000‑50000
}

③ http块

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;          # 开启高效文件传输
    keepalive_timeout  65;       # http长连接超时时间
    # 可以写多个server、upstream
}

④ server虚拟主机块

server {
    listen       80;            # 监听端口
    server_name  localhost;      # 域名/IP
    error_page  404              /404.html;
    error_page   500 502 503 504  /50x.html;
}

⑤ location块(核心)

根据url匹配请求,处理静态资源或者反向代理转发。

location / {
    root   html;         # 静态资源根目录
    index  index.html index.htm; # 默认访问首页
}

/ 代表匹配所有请求;root指定静态文件查找目录;index设置默认首页。

四、实战1:静态网站部署 + 虚拟主机

4.1 部署静态网站

将/资料/静态页面/index目录下的所有内容 上传到服务器的nginx/html下即可访问 : 当niginx服务器启动时,访问localhost:80 ,则直接再nginx安装路径下的html中找你要访问的欢迎页面

4.2 虚拟主机:一台服务器跑多个网站

需求:

  • 81端口访问完美校园网站
  • 82端口访问旅游网站
  1. 在nginx根目录新建文件夹wanxiao、travel,放入对应index.html
  2. nginx.conf增加两个server
 server {
        listen       81;
        server_name  localhost;
        location / {
            root wanxiao;
            index  index.html;
        }
    }
 server {
        listen       82;
        server_name  localhost;
        location / {
            root travel;
            index  index.html;
        }
    }

地址栏输入http://localhost:81 可以看到完美校园首页

地址栏输入http://localhost:82 可以看到旅游网首

五、正向代理与反向代理

5.1 什么是代理

代理服务器作为中间中转,客户端不直接访问目标服务器,由代理代为收发报文。分为正向代理、反向代理。

5.2 正向代理

代理客户端,隐藏真实客户端。 典型例子:VPN。

  • 客户端明确知道目标服务器是谁;
  • 服务端收到请求,只能看到代理服务器IP,不知道真实用户。
客户端 →【正向代理服务器】→ 目标网站

5.3 反向代理【Nginx重点】

代理后端服务器,隐藏真实后端集群。 客户端只访问Nginx,不知道背后Tomcat、微服务集群的真实IP。

浏览器 →【Nginx反向代理】→ 后端Tomcat1/Tomcat2

反向代理价值:

  1. 隐藏后端服务器IP,提升内网服务安全性;
  2. 实现负载均衡;
  3. SSL证书统一卸载;
  4. 统一权限控制、缓存、压缩;
  5. 内网服务对外发布。

5.4 Nginx反向代理配置示例

配置反向代理-准备工作

(1) 将travel案例部署到tomcat中(ROOT目录)。

(2)启动TOMCAT,输入网址http://localhost:8080/ 可以看到网站首页

配置反向代理

(1)在Nginx主机修改 Nginx配置文件

upstream tomcat-travel{ # 负载均衡服务器设置:主要用于负载均衡和设置一系列的后端服务器
       server 127.0.0.1:8080;
}
server {
        listen       80;            # 监听的端口
        server_name  localhost;     # 域名或ip
        location / {                # 访问路径配置
            # root   index;         # 根目录
            proxy_pass http://tomcat-travel/travel/;
            index  index.html;      # 默认首页
        }
}

(2)重新启动Nginx 然后用浏览器测试:http://localhost:80

5、 正向代理和反向代理的区别

最核心的不同在于代理的对象不同。

  • 正向代理是代理客户端,反向代理是代理服务器。
  • 而根据这核心的区别,我们也可以记住:代理哪端便可以隐藏哪端。
  • 正向代理隐藏真实客户端,反向代理隐藏真实服务端。

5.5 正向代理与反向代理核心区别

类型代理对象隐藏对象典型案例
正向代理代理客户端真实客户端VPN
反向代理代理服务端真实后端服务器Nginx、网关

口诀:代理谁,就隐藏谁。

六、Nginx负载均衡实战

6.1 负载均衡是什么

把用户请求分摊到多台后端服务器,防止单台机器压力过大,提升并发能力与高可用。

负载均衡三种实现方案:

  1. DNS负载均衡:域名解析返回多个IP;
  2. 硬件负载均衡:F5,性能强,价格昂贵;
  3. 软件负载均衡:Nginx、LVS、HAProxy,开源免费,互联网企业主流选择。

6.2 实验环境准备

复制3份Tomcat,端口分别为8080、8081、8082,部署相同项目,修改首页标题用来区分到底访问了哪一台tomcat。

6.3 基础负载均衡配置(默认轮询)

upstream tomcat-nginx {
	   server 127.0.0.1:8080;
	   server 127.0.0.1:8081;
	   server 127.0.0.1:8082;
 }
server {
        listen       80;
        server_name  localhost;
        location / {
	    	proxy_pass http://tomcat-nginx/;
            index  index.html;
        }
}

刷新浏览器,请求轮流分发三台tomcat,每台各占1/3流量。

6.4 Nginx负载均衡5种策略

1)轮询(默认)

请求依次分配给各个后端服务器,服务器性能相同时使用。无需额外配置。

2)weight 加权轮询

服务器硬件性能不一样,性能高的机器分配更多流量。weight代表权重。

upstream tomcat-nginx{
	server 127.0.0.1:8080 weight=1;
	server 127.0.0.1:8081 weight=2;
	server 127.0.0.1:8082 weight=3;
}

3)ip_hash

根据客户端ip哈希,同一个客户端永远访问同一台后端,实现会话保持。

不推荐,微服务优先使用Redis+token保存会话,避免黏滞带来流量不均衡。

upstream tomcat-nginx{
	ip_hash;
	server 127.0.0.1:8080 weight=1;
	server 127.0.0.1:8081 weight=2;
	server 127.0.0.1:8082 weight=3;
}

4)least_conn 最小连接数

请求转发给当前活跃连接数最少的后端服务器;适合请求耗时差异大的业务。

upstream tomcat-nginx{
	least_conn;
	server 127.0.0.1:8080;
	server 127.0.0.1:8081;
	server 127.0.0.1:8082;
}

5)fair(第三方扩展)

根据后端服务器响应时间,响应越快分得越多请求,需要安装fair模块。

upstream tomcat-nginx{
	fair;
	server 127.0.0.1:8080;
	server 127.0.0.1:8081;
	server 127.0.0.1:8082;
}

七、知识点总结

  1. Nginx擅长静态资源、反向代理、负载均衡;动态Java项目交给Tomcat。
  2. nginx -t检查配置,nginx -s reload平滑重载配置,生产环境不要用stop。
  3. 核心配置结构:http -> server(虚拟主机) -> location(URL匹配);upstream定义后端服务池。
  4. 正向代理代理客户端;反向代理代理后端服务器,Nginx主要用反向代理。
  5. 负载均衡常用策略:轮询、加权轮询、ip_hash、least_conn最小连接数。
  6. 动静分离:静态资源Nginx直接返回,动态接口反向代理转发给后端容器。

拓展思考(承接微服务系列)

Nginx属于基础反向代理,只支持静态写死upstream地址; 微服务场景下服务实例会动态扩缩容,于是出现API网关(APISIX、Spring Cloud Gateway),网关对接Nacos/Consul服务发现,动态更新upstream后端列表。

这也是Nginx和微服务网关的核心区别。

到此这篇关于Nginx代理服务器完整教程之反向代理、负载均衡、动静分离实战的文章就介绍到这了,更多相关Nginx代理服务器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 通过nginx做mysql的负载均衡实现过程

    通过nginx做mysql的负载均衡实现过程

    Nginx stream模块用于DNS和主从MySQL的TCP/UDP代理与负载均衡,安装需编译启用或通过yum安装,配置stream块及upstream实现转发和轮询,测试后验证端口监听状态
    2025-07-07
  • Nginx设置HttpOnly Secure SameSite参数解决Cookie信息丢失

    Nginx设置HttpOnly Secure SameSite参数解决Cookie信息丢失

    本文主要介绍了Nginx中Cookie缺少SameSite属性的问题,并详细解释了HttpOnly、Secure和SameSite属性的作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • nginx配置引发的403问题解决办法

    nginx配置引发的403问题解决办法

    这篇文章主要介绍了nginx配置引发的403问题解决办法的相关资料,需要的朋友可以参考下
    2017-06-06
  • NGINX 报错 413 Request Entity Too Large的问题解决

    NGINX 报错 413 Request Entity Too&nbs

    本文讲述了处理Nginx因接口数据量过大导致的413错误,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-08-08
  • 使用Nginx让网站快速置灰的方法

    使用Nginx让网站快速置灰的方法

    这篇文章主要介绍了使用Nginx让网站快速置灰的方法,首先是查看当前编译的版本是否支持http_sub_module模块,如果不支持需要重新编译增加此模块,具体配置方法参考下本文
    2023-11-11
  • Nginx访问慢问题解决办法(慢1s)

    Nginx访问慢问题解决办法(慢1s)

    这篇文章主要给大家介绍了关于Nginx访问慢问题解决办法的相关资料,访问速度对网站是极为关键的因素,而服务器对其影响最为深远,需要的朋友可以参考下
    2023-08-08
  • nginx代理返回代码499问题分析与处理

    nginx代理返回代码499问题分析与处理

    我们通过nginx作为互联网代理服务器,通过它实现我行内部系统向互联网系统的接口访问及调用,但是在使用过程中,不时的会出现大量返回代码为499的问题,所以本文我们对为什么nginx会返回499错误代码展开分析和研究
    2023-06-06
  • Apache和Nginx实现虚拟主机的3种方式小结

    Apache和Nginx实现虚拟主机的3种方式小结

    Apache是一个模型化的服务器,可以运行在几乎所有的服务器上。其属于应用服务器,这篇文章主要介绍了Apache和Nginx实现虚拟主机的3种方式,需要的朋友可以参考下
    2023-11-11
  • Nginx配置http和https的实现步骤

    Nginx配置http和https的实现步骤

    Nginx是使用最多的代理服务器之一,本文主要介绍了Nginx配置http和https的实现步骤,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 利用SSL配置Nginx反向代理的简单步骤

    利用SSL配置Nginx反向代理的简单步骤

    这篇文章主要给大家介绍了关于利用SSL配置Nginx反向代理的简单步骤,文中通过示例代码介绍的非常详细,对大家学习或者使用Nginx具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05

最新评论