Nginx图解 “反向代理|负载均衡|动静分离”

文章目录

  • 四、Nginx配置反向代理
    • [4.1 反向代理实现一](#4.1 反向代理实现一)
      • [4.1.1 实现效果](#4.1.1 实现效果)
      • [4.1.2 配置示例](#4.1.2 配置示例)
    • [4.2 反向代理实现二](#4.2 反向代理实现二)
      • [4.2.1 应用场景](#4.2.1 应用场景)
      • [4.2.2 准备工作](#4.2.2 准备工作)
      • [4.2.3 配置示例](#4.2.3 配置示例)
  • 五、Nginx配置负载均衡
    • [5.1 实现效果](#5.1 实现效果)
    • [5.2 准备工作](#5.2 准备工作)
    • [5.3 upstream指令参数](#5.3 upstream指令参数)
    • [5.4 负载均衡基本配置](#5.4 负载均衡基本配置)
    • [5.5 负载均衡方式](#5.5 负载均衡方式)
      • [5.5.1 轮询(默认)](#5.5.1 轮询(默认))
      • [5.5.2 weight权重](#5.5.2 weight权重)
      • [5.5.3 ip_hash](#5.5.3 ip_hash)
      • [5.5.4 least_conn](#5.5.4 least_conn)
      • [5.5.5 fair(第三方)](#5.5.5 fair(第三方))
      • [5.5.6 url_hash(第三方)](#5.5.6 url_hash(第三方))
  • 六、Nginx配置动静分离
    • [6.1 什么是动静分离?](#6.1 什么是动静分离?)
    • [6.2 准备工作](#6.2 准备工作)
    • [6.3 具体配置](#6.3 具体配置)

四、Nginx配置反向代理

4.1 反向代理实现一

4.1.1 实现效果

访问 192.168.17.129:80(监听80端口),自动跳转到 http://127.0.0.1:8080

4.1.2 配置示例

nginx 复制代码
server {
    listen 80;
    server_name 192.168.17.129;
    location / {
        proxy_pass http://127.0.0.1:8080;
        index index.html index.htm;
    }
}

4.2 反向代理实现二

4.2.1 应用场景

  • 访问 http://127.0.0.1:9001/edu/ 跳转到 127.0.0.1:8080
  • 访问 http://127.0.0.1:9001/vod/ 跳转到 127.0.0.1:8081

4.2.2 准备工作

  • 部署两台Tomcat服务器,分别占用8080和8081端口。
  • 在两台Tomcat的webapps目录下创建edu、vod文件夹,并添加测试页面。

4.2.3 配置示例

nginx 复制代码
server {
    listen 9001;
    server_name 127.0.0.1;
    # 匹配/edu/路径
    location /edu/ {
        proxy_pass http://127.0.0.1:8080;
    }
    # 匹配/vod/路径
    location /vod/ {
        proxy_pass http://127.0.0.1:8081;
    }
}

五、Nginx配置负载均衡

5.1 实现效果

浏览器输入 http://192.168.17.129/edu/a.html,请求将平均分发到8080和8081端口的Tomcat服务器(负载均衡)。

5.2 准备工作

  • 部署两台Tomcat服务器(8080、8081端口)。
  • 在两台Tomcat的webapps目录下创建edu文件夹,并在其中创建a.html测试页面(页面内容区分两台服务器)。

5.3 upstream指令参数

  • max_conns:限制最大同时连接数(1.11.5版本前仅商业版支持)。

  • slow_start:单位秒,权重在指定时间内从1上升到设定值;不适用hash、随机负载均衡,仅单台server时失效(商业版支持)。

  • down:标记服务器不可用

    复制代码
    upstream tomcats {
        server 192.168.1.173:8080 down;
        server 192.168.1.174:8080 weight=1;
        server 192.168.1.175:8080 weight=1;
    }
  • backup:备用服务器,仅当其他服务器不可用时生效;不适用 hash、随机负载均衡

    bash 复制代码
    upstream tomcats {
        server 192.168.1.173:8080 backup;
        server 192.168.1.174:8080 weight=1;
        server 192.168.1.175:8080 weight=1;
    }
  • max_fails & fail_timeout:max_fails(默认 1)表示失败次数阈值,超过则标记服务器宕机;fail_timeout(默认 10 秒)表示失败重试时间

    bash 复制代码
    upstream wp {
        server 10.158.1.10 down;
        server 10.158.1.20 backup;
        server 10.158.1.30 max_fails=3 fail_timeout=10s weight=5;
        keepalive_timeout 30s;
        keepalive_requests 100;
    }
  • keepalived:保持连接数

    bash 复制代码
    upstream tomcats {
        server 192.168.1.173:8080 weight=1;
        server 192.168.1.174:8080 weight=5;
        server 192.168.1.175:8080 weight=2;
        keepalive 32; # 保持的连接数
    }
    server {
        listen 80;
        server_name www.tomcats.com;
        location / {
            proxy_pass http://tomcats;
            proxy_http_version 1.1; # 连接协议版本
            proxy_set_header Connection ""; # 清空连接请求头
        }
    }
  • 控制浏览器缓存

    bash 复制代码
    location / {
        proxy_pass http://tomcats;
        expires 10s;  # 浏览器缓存10秒
        # expires @22h30m;  # 晚上22:30过期
        # expires -1h;  # 缓存1小时前失效
        # expires epoch;  # 不设置缓存
        # expires off;  # 关闭缓存,由浏览器控制
        # expires max;  # 最大过期时间
    }
    • 反向代理缓存
    bash 复制代码
    upstream tomcats {
        server 192.168.1.173:8080 weight=1;
        server 192.168.1.174:8080 weight=5;
        server 192.168.1.175:8080 weight=2;
    }
    # 配置缓存目录、共享内存、最大空间、过期时间
    proxy_cache_path /usr/local/nginx/upsteam_cache
                     keys_zone=mycache:5m
                     max_size=1g
                     inactive=8h
                     use_temp_path=off;
    server {
        listen 80;
        server_name www.tomcats.com;
        proxy_cache mycache; # 开启缓存并指定缓存区域
        proxy_cache_valid 200 304 8h; # 200/304响应码缓存8小时
        location / {
            proxy_pass http://tomcats;
        }
    }

5.4 负载均衡基本配置

bash 复制代码
http {
    # 配置上游服务器集群
    upstream tomcats {
        server 192.168.17.129:8080;
        server 192.168.17.129:8081;
    }
    server {
        listen 80;
        server_name 192.168.17.129;
        location / {
            proxy_pass http://tomcats; # 转发到集群
            index index.html index.htm;
        }
    }
}

5.5 负载均衡方式

5.5.1 轮询(默认)

Nginx自带,客户端请求按时间顺序轮流分配到不同服务器;后端服务器不可用时自动过滤。

bash 复制代码
upstream my_test_server {
    server 192.168.0.100:8080;
    server 192.168.0.101:8080;
}

5.5.2 weight权重

Nginx自带,通过weight指定轮询几率(默认1),权重越高,被分配次数越多;适用于后端服务器性能不均衡场景。

bash 复制代码
upstream my_test_server {
    server 192.168.0.100:8080 weight=1;
    server 192.168.0.101:8080 weight=2;
    server 192.168.0.102:8080 weight=3;
}

5.5.3 ip_hash

Nginx自带,按访问IP的hash结果分配,保证同一用户固定访问一台后端服务器;解决session共享问题。

bash 复制代码
upstream my_test_server {
    ip_hash;
    server 192.168.0.100:8080;
    server 192.168.0.101:8080;
}

5.5.4 least_conn

Nginx自带,将请求转发给连接数最少的后端服务器;动态适配服务器负载情况。

bash 复制代码
upstream my_test_server {
    least_conn;
    server 192.168.0.100:8080;
    server 192.168.0.101:8080;
}

5.5.5 fair(第三方)

按服务器响应时间分配,响应时间短的优先;需安装第三方插件。

bash 复制代码
upstream my_test_server {
    fair;
    server 192.168.0.100:8080;
    server 192.168.0.101:8080;
}

5.5.6 url_hash(第三方)

按URL的hash结果分配,同一URL固定访问一台服务器;配合缓存使用,减少资源重复加载;需安装第三方插件。

bash 复制代码
upstream my_test_server {
    hash $request_uri;
    server 192.168.0.100:8080;
    server 192.168.0.101:8080;
}

六、Nginx配置动静分离

6.1 什么是动静分离?

将动态请求与静态请求分开处理,并非单纯物理分离动态/静态页面,核心是让Nginx处理静态请求(图片、CSS、JS等),Tomcat处理动态请求(JSP、Servlet等)。

实现方式分为两种:

  • 静态资源独立部署:将静态文件放在独立服务器,配置独立域名(主流方案)。
  • 混合部署分离:动态与静态文件混合发布,通过Nginx区分转发。

通过location匹配不同后缀名实现转发,结合expires参数设置浏览器缓存过期时间,减少服务器请求压力。expires用于设置资源过期时间,不经常变动的资源建议设置(如3d),经常更新的资源不建议设置。

6.2 准备工作

在Linux系统中创建静态资源目录(如 /opt/static),放入图片、CSS、JS等静态文件。

6.3 具体配置

bash 复制代码
server {
    listen 80;
    server_name 192.168.17.129;
    # 匹配静态资源后缀
    location ~ .*\.(html|htm|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
        root /opt/static; # 静态资源目录
        expires 3d; # 缓存3天
    }
    # 匹配动态请求
    location ~ .*\.(jsp|do)$ {
        proxy_pass http://127.0.0.1:8080; # 转发到Tomcat
    }
}

文章结束,喜欢就给个一键三连吧,你的肯定是我最大的动力,点赞上一千我就是脑瘫也出下章

相关推荐
王正南1 小时前
kali-linux 虚拟机连接安卓模拟器
android·linux·运维·虚拟机连接模拟器·安卓模拟器,linux虚拟机
三不原则1 小时前
故障案例:容器启动失败排查(AI运维场景)——从日志分析到根因定位
运维·人工智能·kubernetes
吳所畏惧1 小时前
Linux环境/麒麟V10SP3下离线安装Redis、修改默认密码并设置Redis开机自启动
linux·运维·服务器·redis·中间件·架构·ssh
yueguangni2 小时前
sysstat 版本 10.1.5 是 CentOS 7 的默认版本,默认情况下确实不显示 %wait 字段。需要升级到新版sysstat
linux·运维·centos
funfan05172 小时前
【运维】MySQL数据库全量备份与恢复实战指南:从入门到精通
运维·数据库·mysql
-dcr2 小时前
49.python自动化
运维·python·自动化
Benny的老巢2 小时前
Mac上用XAMPP搭建局域网可访问的开发环境,让局域网内其他设备通过域名访问
nginx·macos·apache·xampp·php开发环境
萧曵 丶3 小时前
Linux 业务场景常用命令详解
linux·运维·服务器
乾元4 小时前
ISP 级别的异常洪泛检测与防护——大流量事件的 AI 自动识别与响应工程
运维·网络·人工智能·安全·web安全·架构
youxiao_905 小时前
kubernetes 概念与安装(一)
linux·运维·服务器