当前位置: 首页 > news >正文

nginx的正向代理和反向代理

一、正向代理以及缓存配置

1.代理:客户端不再是直接访问服务器,通过代理服务器访问服务端

正向代理:面向客户端,我们通过代理服务器的IP地址访问目标服务端,服务端只知道代理服务器的定位,真正的客户端ip可以隐藏     正向代理配置的语法proxy_pass

正向指定百度网址访问

 正向指定所有网址

server {
        listen       8888;
        server_name  localhost;
        resolver 8.8.8.8 valid=300 ipv6=off;
        #设置dns解析地址,解析器的缓存时间300秒,每300秒重新解析一次,关闭ipv6
        resolver_timeout 3s;
        #解析超时的时间3秒
        proxy_read_timeout 30s;
        #读取代理服务器的超时时间,30s,默认是60s.
        proxy_send_timeout 30s;
        #向服务端发送数据的超时时间是30s,默认是60s.
        proxy_connect_timeout 30s;
        #和服务器建立连接的超时时间,30s,默认也是60s
        charset utf-8;

        #access_log  logs/host.access.log  main;

               location / {
            root   html;
            index  index.html index.htm;
         proxy_pass  $scheme://$http_host$request_uri;
         proxy_set_header Host $http_host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_set_header X-Forwarded-Host $host;
         proxy_set_header X-Forwarded-Port $server_port;
         proxy_buffers 256 4k;
         proxy_max_temp_file_size 0;
         proxy_cache_valid 200 302 1m;
         proxy_cache_valid 301 1h;
         proxy_cache_valid any 1m;
            #需要把客户端的真实ip,客户端的主机名,客户端的请求方式,服务端的端口,真实的ip地址添加在请求头当中
           # 请求转发到$url的地址,通过代理服务器地址可以直接访问百度 http://$url:端口
           # 设置页面的缓存:
            proxy_buffers 256 4k;
           #设置缓冲区为256个,大小是4k
            proxy_max_temp_file_size 0;
           # nginx服务器做为代理的时候暂时存放的响应数据的最大临时文件的大小为0,不使用临时文件
            proxy_cache_valid 200 302 1m;
           #当状态吗是200和302时,缓存的有效期是1分钟
            proxy_cache_valid 301 1h;
           #当状态吗是301,缓存的有效期是1小时
            proxy_cache_valid any 1m;
           #除了上述的三个状态吗,其他的缓存保存时间1分钟。

        }

二、反向代理

反向代理(又叫负载均衡):客户端还是访问的是代理地址,但是具体的访问web服务器是哪一台我们并不知道。

作用:请求分配到多个后台服务器上,分担服务器的负载,提供系统的可用性和稳定性,缓存加速,安全保护。

三、反向代理中四层代理和七层代理之间的区别:

http模块配置的都是七层,七层是应用层,走的是http协议,可以对请求进行解析和处理,因此七层代理走的是用户态,应用协议和程序功能,;七层的处理速度相对比较慢,但是可以提供更高级的功能和更好的用户体验;既可以是域名也可以是IP端口。

四层代理就是传输层,IP+端口,请求转发到后端,无法对请求进行深入的解析和处理,只是对请求流量的转发;四层转发是内核态,内核处理,内核转发,所以速度比较快。

应用场景:七层代理,一般都是对外提供访问,需要对请求进行处理,包括安全,过滤,流量控制。

                  四层代理,一般都是内部使用,不需要对流量请求做特殊处理。

四、配置方法以及负载均衡的算法(只有反向代理才是负载均衡。): 

1.配置方法:七层只能写在http的大模块当中,不能写在全局模块中,不能写在server,location模块中,命令upstream。

                     四层只能写在全局配置当中,不能写在http模块当中,命令stream。

2.负载均衡的算法:

轮巡:round robin   是最简单也是最基础的算法, 请求轮流分配到后端服务器;轮流的算法适用于后台服务器处理能力相同的情况,访问量不大的情况下默认算法,可以不加。

加权轮巡:再轮巡的基础之上,给每个服务器设置不同的权重,配置权重的语法weight;流量的分配比不一定是按照权重比来的,权重高的被转发的概率大,权重低相对较小。

后端服务器的性能差异:性能高的权重相对高些,性能低的权重相对较低。

3.最小连接数算法:语法 least_conn  它会把请求发送到当前连接数较少的后端服务器上;后端服务器处理任务耗时不同的情况,可以避免请求集中在处理能力更强的服务器上。

4.ip_hash*怎么做会话保持:ip_hash根据算法计算客户端的ip地址的hash值,然后将请求转发到相应的服务器,在第一次访问网址之时,就会计算出这个hash值,会把请求分到一个服务器,但是下一次客户端如果使用相同的ip地址就不再分配到其它的服务器,除非后台服务器的算法变更,或者后台的服务器数量发生了变化,这时才会更改访问的服务器,访问语法就是ip_hash;适用场景:高并发,如果说客户端进来之后,不停的轮换服务器,反而会加重服务器的负担,固定在一台服务器上,降低了代理服务器的压力,同时也节约了资源。
nginx当中怎么实现会话保持:ip_hash可以实现会话保持
                                                sessionc 动态页面里面配置会话

5.URL_hash:根据请求的url地址来计算hash值,然后再转发,如果每次请求的url都一样,就会被分配到同一个服务器;如果转发的地址发生变化,后台服务器清理缓存或者后台服务器的数量发生变化。

 以上算法都是再七层当中使用的,四层没有IP_hash和url_hash的算法

 五、实验

1.基于域名的反向代理:

 三个IP都要配置

 六、四层代理

配置方式

这里监听端口设置80,和下面冲突,必须要改一个,不然两个都占用起不来报错

在四层代理中,可以使用加权轮询和最小连接数算法也可以实现负载均衡

但是ip_hash和uri_hash不可以在stream中使用

四层不能对请求处理,只是转发数据包。不能分析客户端地址和URL

http七层代理可以请求地址和请求的URL

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 微软 Edge 浏览器全解析
  • Kylin系列(三)安装与配置:搭建你的第一个 Kylin 环境
  • 网络防御保护——网络安全概述
  • 第二周:李宏毅机器学习笔记
  • Android知识收集
  • openGauss配置vscode编译调试环境
  • Python: 分块读取文本文件
  • SQL注入如何判断数据库类型
  • JVM专题之G1垃圾收集器下
  • python学习-容器类型
  • Redis 7.x 系列【22】主从复制配置项
  • 创建数据库表的语法定义包含了SQL Server、Mysql、PostgreSQL、SQLite的示例
  • zabbix 学习笔记
  • 基础架构服务API:降低成本,提升业务效益
  • DropNotch for Mac v1.0.1 在 Mac 刘海快速使用 AirDrop
  • CentOS 7 防火墙操作
  • const let
  • ES6 ...操作符
  • Iterator 和 for...of 循环
  • JavaScript设计模式与开发实践系列之策略模式
  • Java-详解HashMap
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Sass 快速入门教程
  • Service Worker
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Vim 折腾记
  • vue数据传递--我有特殊的实现技巧
  • 程序员该如何有效的找工作?
  • 对超线程几个不同角度的解释
  • 复习Javascript专题(四):js中的深浅拷贝
  • 高性能JavaScript阅读简记(三)
  • 记录:CentOS7.2配置LNMP环境记录
  • 简单数学运算程序(不定期更新)
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 马上搞懂 GeoJSON
  • 06-01 点餐小程序前台界面搭建
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 说说我为什么看好Spring Cloud Alibaba
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #在 README.md 中生成项目目录结构
  • ${factoryList }后面有空格不影响
  • (bean配置类的注解开发)学习Spring的第十三天
  • (LeetCode) T14. Longest Common Prefix
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (回溯) LeetCode 131. 分割回文串
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转载)hibernate缓存
  • (自适应手机端)响应式服装服饰外贸企业网站模板