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
    }
}

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

相关推荐
wangjialelele1 小时前
Linux下的IO操作以及ext系列文件系统
linux·运维·服务器·c语言·c++·个人开发
HypoxiaDream1 小时前
LINUX-Ext系列⽂件系统
linux·运维·服务器
小毛驴8501 小时前
Linux curl 命令用法
linux·运维·chrome
李斯啦果1 小时前
【Linux】Linux目录配置
linux·运维·服务器
AI+程序员在路上1 小时前
linux下线程中pthread_detach与pthread_join区别
linux·运维·服务器
logocode_li1 小时前
说透 Linux Shell:命令与语法的底层执行逻辑
linux·运维·ssh
来鸟 鸣间2 小时前
Linux下3个so库之间的关系
linux·运维
释怀不想释怀2 小时前
Linux文件上传(rz)和下载(sz)压缩(tar.gz)和解压(zip)
linux·运维·服务器
IOsetting2 小时前
金山云主机添加开机路由
运维·服务器·开发语言·网络·php
酉鬼女又兒2 小时前
零基础入门Linux指南:每天一个Linux命令_sed
linux·运维·服务器