「Nginx」-一定要明白Nginx的七层代理与四层代理
off999 2025-01-29 17:26 18 浏览 0 评论
代理是在服务器和客户端之间的一层服务器,代理将客户端的请求转发给服务器,然后将服务端的响应转发给客户端。常用的代理技术分为正向代理、反向代理。Nginx虽然主要是来解决反向代理的,但也能支持正向代理。
- 正向代理:代理服务器替代访问者去访问目标服务器。访问者知道目标服务器,目标服务器只知道代理服务器。需要访问者端进行代理配置。主要作用有“翻墙”、加速、缓存、访问授权、隐藏身份等。
- 反向代理:访问者访问代理服务器,代理服务器根据请求判断并转发到目标服务器,并将获得的内容返回给客户端。访问者把代理服务器当作目标服务器,目标服务器能感知到真实访问者,当然代理服务器可以修改请求的部分信息。主要作用有保护和隐藏原始资源、负载均衡等。
四层与七层代理
Nginx原来是在七层做代理的,新的版本是支持四层代理的。这里的层是OSI 7层网络模型,OSI 模型是从上往下的,越底层越接近硬件,越往上越接近软件,所以四层代理要比七层代理性能高很多,但是七层可以进行更多的业务控制。
- 四层代理:工作在TCP层,处理tcp / udp,基于IP+端口的转发,nginx修改请求进来的数据包里面的目标和源IP和端口,然后把数据包发向目标服务器,服务器返回数据,由Nginx再返回给请求客户端。此模式只做包转发,无复杂逻辑,性能非常快。
- 七层代理:工作在应用层,处理http/https,基于URL等应用层信息的转发,根据具体内容(url,参数,cookie,请求头)然后转发到相应的服务器,收到服务器的响应数据后再转发给请求客户端。此模式可以实现http信息的改写、头信息的改写、安全应用规则控制、URL匹配规则控制、以及转发、rewrite等等的规则。
正向代理配置项
Nginx正向代理配置较少,主要在server中配置resolver来指定指定DNS服务器IP地址。resolver是必需的,解析接收到的域名,要支持https是需要安装ngx_http_proxy_connect_module模块。
...
server {
resolver 192.168.1.1; #指定DNS服务器IP地址
listen 8080;
location / {
proxy_pass http://$http_host$request_uri; #设定代理服务器的协议和地址
}
}
...
反向代理配置-七层
Nginx的七层代理是其最常用的重要功能,也同时衍生出很多与此相关的 Nginx 服务器重要功能。主要配置项有location块的URL匹配、资源位置、代理跳转等。Nginx转发模块是ngx_http_proxy_module,默认安装的可直接使用。
http #http块
{
upstream us_name #upstream块
{
server ... #被代理服务器地址,以及参数
}
server #server块
{
location [PATTERN] #location块
{
...
proxy_pass us_name;
}
}
}
反向代理配置-四层
四层的代理(stream)由模块ngx_stream_core_module支持,默认没有编译到nginx, 编译nginx时候带上 --with-stream。在配置上stream模块用法和http模块差不多,最大区别是在server块配置中没有了对URL的各种规则转发。也支持tcp长连接保持、SSL等。
stream #stream块
{
upstream us_name #upstream块
{
server ... #被代理服务器地址,以及参数
}
server #server块
{
listen address:port protocol; #可选ip/主机名与协议
proxy_pass us_name;
}
}
负载均衡的调度算法
Nginx的upstream目前主流支持的6种方式的分配,分别是内置策略:轮询策略,权重轮询策略,ip_hash策略,最少连接数;和第三方策略:fair策略,url_hash策略,sticky策略等。
- 轮询:这是Nginx的默认方式,每个请求会按时间顺序逐一分配到不同的后端服务器。两个参数fail_timeout 与max_fails结合使用,周期内最大失败次数即故障不再访问,故障恢复后下一个周期后继续提供服务。还有参数backup标记备用,down标记停机。
- 加权轮询:权重方式,在轮询策略的基础上指定轮询的几率。数字超大几率越高。
- IP_HASH:基于客户端IP的分配方式,相同的IP会访问同一个服务器。最简解决集群的会话(Session)一致问题的方案。
- 最少连接数:最少的活跃连接数的服务器优先分配。
- fair:响应时间短的优先分配。需要安装nginx-upstream-fair模块。
- URL_HASH:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。需要nginx_upstream_hash模块,新版默认已经安装。
- sticky:为一个客户端只和一台服务器保持长连接。基于cookie实现,需要安装nginx-sticky-module模块。
相关推荐
- 如何理解python中面向对象的类属性和实例属性?
-
类属性和实例属性类属性就是给类对象中定义的属性通常用来记录与这个类相关的特征类属性不会用于记录具体对象的特征类属性的理解:类属性是与类自身相关联的变量,而不是与类的实例关联。它们通...
- Java程序员,一周Python入门:面向对象(OOP) 对比学习
-
Java和Python都是**面向对象编程(OOP)**语言,无非是类、对象、继承、封装、多态。下面我们来一一对比两者的OOP特性。1.类和对象Java和Python都支持面向对象...
- 松勤技术精选:Python面向对象魔术方法
-
什么是魔术方法相信大家在使用python的过程中经常会看到一些双下划线开头,双下划线结尾的方法,我们把它统称为魔术方法魔术方法的特征魔术方法都是双下划线开头,双下划线结尾的方法魔术方法都是pytho...
- [2]Python面向对象-【3】方法(python3 面向对象)
-
方法的概念在Python中,方法是与对象相关联的函数。方法可以访问对象的属性,并且可以通过修改对象的属性来改变对象的状态。方法定义在类中,可以被该类的所有对象共享。方法也可以被继承并重载。方法的语法如...
- 一文带你理解python的面向对象编程(OOP)
-
面向对象编程(OOP,Object-OrientedProgramming)是一个较难掌握的概念,而Python作为一门面向对象的语言,在学习其OOP特性时,许多人都会对“继承”和“多态”等...
- 简单学Python——面向对象1(编写一个简单的类)
-
Python是一种面向对象的编程语言(ObjectOrientedProgramming),在Python中所有的数据类型都是对象。在Python中,也可以自创对象。什么是类呢?类(Class)是...
- python进阶突破面向对象——四大支柱
-
面向对象编程(OOP)有四大基本特性,通常被称为"四大支柱":封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)和抽象(Abstrac...
- Python学不会来打我(51)面向对象编程“封装”思想详解
-
在面向对象编程(Object-OrientedProgramming,简称OOP)中,“封装(Encapsulation)”是四大核心特性之一(另外三个是继承、多态和抽象),它通过将数据(属性)和...
- Python之面向对象:对象属性解析:MRO不够用,补充3个方法
-
引言在前面的文章中,我们谈及Python在继承关系,尤其是多继承中,一个对象的属性的查找解析顺序。由于当时的语境聚焦于继承关系,所以只是简要提及了属性解析顺序同方法的解析顺序,而方法的解析顺序,在Py...
- Python之面向对象:通过property兼顾属性的动态保护与兼容性
-
引言前面的文章中我们简要提及过关于Python中私有属性的使用与内部“名称混淆”的实现机制,所以,访问私有属性的方法至少有3种做法:1、使用实例对象点操作符的方式,直接访问名称混淆后的真实属性名。2、...
- Python之面向对象:私有属性是掩耳盗铃还是恰到好处
-
引言声明,今天的文章中没有一行Python代码,更多的是对编程语言设计理念的思考。上一篇文章中介绍了关于Python面向对象封装特性的私有属性的相关内容,提到了Python中关于私有属性的实现是通过“...
- Python中的私有属性与方法:解锁面向对象编程的秘密
-
Python中的私有属性与方法:解锁面向对象编程的秘密在Python的广阔世界里,面向对象编程(OOP)是一种强大而灵活的方法论,它帮助我们更好地组织代码、管理状态,并构建可复用的软件组件。而在这个框...
- Python 面向对象:掌握类的继承与组合,让你的代码更高效!
-
引言:构建高效代码的基石Python以其简洁强大的特性,成为众多开发者首选的编程语言。而在Python的面向对象编程(OOP)范畴中,类的继承和组合无疑是两大核心概念。它们不仅能帮助我们实现代码复用,...
- python进阶-Day2: 面向对象编程 (OOP)
-
以下是为Python进阶Day2设计的学习任务,专注于面向对象编程(OOP)的核心概念和高阶特性。代码中包含详细注释,帮助理解每个部分的实现和目的。任务目标:复习OOP基础:类、对象、继...
- 外婆都能学会的Python教程(二十八):Python面向对象编程(二)
-
前言Python是一个非常容易上手的编程语言,它的语法简单,而且功能强大,非常适合初学者学习,它的语法规则非常简单,只要按照规则写出代码,Python解释器就可以执行。下面是Python的入门教程介绍...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python重命名文件 (54)
- python面向对象编程 (60)
- python串口编程 (60)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)