广告位联系
返回顶部

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

nginx 来源:互联网 作者:佚名 发布时间:2026-11-01 20:36:29 人浏览
摘要

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

一、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 下载

官网地址:

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

2.2 核心目录详解

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

1

2

3

4

nginx -t        # 检查配置文件语法是否正确,修改配置必执行

start nginx     # 启动nginx

nginx -s stop   # 快速停止nginx

nginx -s reload # 平滑重启,加载新配置(不中断现有连接)

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

三、nginx.conf配置文件详解

整体四层结构:

1

2

3

4

5

6

7

8

main{          # 全局块

    http{        # http块

        upstream{} # 负载均衡后端服务池

        server{   # 虚拟主机,一个server代表一个网站

            location{} # url匹配,请求转发规则

        }

    }

}

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

① main全局块

1

2

3

worker_processes  1;        # worker进程数,建议等于CPU核心数

error_log  logs/error.log;  # 全局错误日志

pid        logs/nginx.pid;  # pid文件位置

② events块:网络模型

1

2

3

events {

    worker_connections  1024; # 单个worker最大并发连接数,建议10000?50000

}

③ http块

1

2

3

4

5

6

7

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;          # 开启高效文件传输

    keepalive_timeout  65;       # http长连接超时时间

    # 可以写多个server、upstream

}

④ server虚拟主机块

1

2

3

4

5

6

server {

    listen       80;            # 监听端口

    server_name  localhost;      # 域名/IP

    error_page  404              /404.html;

    error_page   500 502 503 504  /50x.html;

}

⑤ location块(核心)

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

1

2

3

4

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

server {

       listen       81;

       server_name  localhost;

       location / {

           root wanxiao;

           index  index.html;

       }

   }

server {

       listen       82;

       server_name  localhost;

       location / {

           root travel;

           index  index.html;

       }

   }

地址栏输入 可以看到完美校园首页

地址栏输入 可以看到旅游网首

五、正向代理与反向代理

5.1 什么是代理

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

5.2 正向代理

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

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

1

客户端 →【正向代理服务器】→ 目标网站

5.3 反向代理【Nginx重点】

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

1

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

反向代理价值:

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

5.4 Nginx反向代理配置示例

配置反向代理-准备工作

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

(2)启动TOMCAT,输入网址 可以看到网站首页

配置反向代理

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

1

2

3

4

5

6

7

8

9

10

11

12

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 然后用浏览器测试:

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 基础负载均衡配置(默认轮询)

1

2

3

4

5

6

7

8

9

10

11

12

13

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代表权重。

1

2

3

4

5

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保存会话,避免黏滞带来流量不均衡。

1

2

3

4

5

6

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 最小连接数

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

1

2

3

4

5

6

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模块。

1

2

3

4

5

6

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和微服务网关的核心区别。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计