2019/05/31 反向代理fastcgi

实现反向代理,后端的web服务器看到的请求是来自nginx代理服务器的,这样在后期的分析日志,客户端的地址是看不到的,
在这里插入图片描述
可以在数据报文头部的添加一个头
第一行,
首部行(可以添加一个新的报文头部
实体行
这就是发送的请求报文的头部

在这里插入图片描述
响应报文头部
在这里插入图片描述
nginx反向代理服务器把客户端的地址添加到请求报文头部
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
加载的log_format的格式
不仅需要把请求报文的格式加进去,还需要修改日志格式

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
找个就是客户端地址,可以把找个加到报文头部里
在这里插入图片描述
抓下报文看看,访问静态页面就会转发到后端的centos6服务器上去
在这里插入图片描述
在这里插入图片描述
反向代理服务器转发到web服务的请求报文在这里插入图片描述
在这里插入图片描述
主机头
代理服务器类型
接收的文件格式
现在修改配置文件添加新的头部信息(键值对是由你自己定义的

在这里插入图片描述
再次访问并且抓包
在这里插入图片描述
在这里插入图片描述
后端服务器肯定收到了这个信息,但是后端服务器还需要修改日志格式才能看到
默认地址是发送请求的客户端地址

在这里插入图片描述
头部地址要用到花括号
在这里插入图片描述
把服务重新启动
在这里插入图片描述
在这里插入图片描述
现在就看到真实地址了
在这里插入图片描述
在这里插入图片描述
一般在添加头部的时候肯能习惯地加x的名字
这个地址请求报文头部将携带remote_addr变量附加在后面,而且用逗号隔开
他的作用主要是解决多层代理的问题的

在这里插入图片描述
在这里插入图片描述
在生产中有可能是多个代理服务器,把所有的地址都累计起来放在一个字符串里,这个地址可以用字符串里面,这个地址可以用一个变量实现$proxy_add_x_format,用逗号隔开可以把很多地址累加在一起。中间如果由多个代理服务器的就把你加进去,如果"x-forward-for(这个名字也可以自己加的,一般大的公司都喜欢用x作为开头) "域在客户端请求中并不存在,那就认为是客户端地址
在这里插入图片描述
现在修改nginx代理服务器配置
在这里插入图片描述
在这里插入图片描述
文本服务器里的日志格式也需要做修改,改成x-forward-for
在这里插入图片描述
再次访问应该是效果一样的
在这里插入图片描述
再加一个调度器,实现多层调度
30.27原本是mysql现在做最前端的调度器

在这里插入图片描述
在27上安装nginx服务器
在这里插入图片描述
直接修改主配置文件
在这里插入图片描述
代理到后端的nginx30。7服务器
在这里插入图片描述
在7上暂时把变量值注释
在这里插入图片描述
现在抓包看看
在这里插入图片描述
是30.6到30。27的
有两个请求

在这里插入图片描述
30。6一直携带过来之
确实是可以记录下来的
在这里插入图片描述
在这里插入图片描述
如果写成remote_addr是否可行,
现在把30.7上的地址取消注释

在这里插入图片描述
在这里插入图片描述
现在变成两个了,但是一般中间反向代理服务器需不需要记录就需要看你的需求,一般是没有必要
在这里插入图片描述
多个nginx反向代理服务器一层层转发到web服务器,是没有必要的,可以在nginx反向代理服务器上把web服务页面缓存下来,但是缓存下来快,还是直接访问web服务快,这个还需要进行测试,因为这个都是放在硬盘里的,找数据的时候还需要缓存到内存中,从内存中响应客户端
在这里插入图片描述
在这里插入图片描述
web服务创建一个比较大的页面
在这里插入图片描述
可以访问
在这里插入图片描述
这是没有通过代理的情况下
在这里插入图片描述
在这里插入图片描述
现在启用缓存试试
在这里插入图片描述
在这里插入图片描述
缓存的启用先要定义一个路径,要定义缓存存放磁盘哪个位置
只能存放在http里面,就不能在自己配置文件里修改,需要去修改主配置文件里去修改
格式 proxy_cache_path +路径(找一个系统存在的文件夹)+(存缓存不是以文件方式存放的,还是以哈希值对文件进行计算,用哈希值数字当文件名,定义level,分几级,每个等级占几个就要指定如(1 2 2)

在这里插入图片描述
在这里插入图片描述
**1:2代表将来生成路径如下,c是文件夹名(1)。29代表下一个文件夹名(两个字是因为2的原因)
还需要定义一些keyzonne的一些信息,(是否启用一个临时的路径use_temp_path,key_zone实际上是个名称,这个名字具体起到(现在光定义缓存,将来要在虚拟主机上去使用缓存,需要起个名字调用这个名称,接着还需要指定大小,
**
在这里插入图片描述在这里插入图片描述
inactive 多长时间失效,就可以把缓存删除掉了

在这里插入图片描述
最多在磁盘上占用多大空间
下面由实例:
在这里插入图片描述
**缓存路径,级别level,keys_zone名字,占多大内存,20m(在内存中占多大内存,真正的数据不是放在内存中的是键(用户访问的URL)和元数据(如范文多少次)
值就是文件名,是放在磁盘上,最多占1G
**在这里插入图片描述
文件确实是放在磁盘上的
每个字代表一个16进制数,那就是文件夹个数=161616

在这里插入图片描述
这个文件夹现在磁盘上还没有
在这里插入图片描述
在这里插入图片描述
接下来就需要修改缓存,需要指定前面调用的名字,用户敲的url就当做key,这个当键,值就是文件内容
200 302 这些响应码才缓存,保存1小时

在这里插入图片描述
其他的缓存一分钟
在这里插入图片描述
在这里插入图片描述
访问一下刚才的数据
在这里插入图片描述
没有自动创建缓存的目录,就自己去创建一个
在这里插入图片描述
在这里插入图片描述
创建父目录
在这里插入图片描述
再次访问就有了,所以父目录需要自己手动创建
在这里插入图片描述
现在里面就有缓存了
在这里插入图片描述
目录文件名就是 efd7
在这里插入图片描述
说是二进制,实际上里面是数据
在这里插入图片描述
服务器端源文件
在这里插入图片描述
实际上是把数据进行了封装,在前面加了个头部
测一下速度

在这里插入图片描述
还是很明显的
在这里插入图片描述
面试题不会让你去配,而是会问你,反向代理服务器的原理
(缓存的是什么,缓存是放在哪里的)
缓存分成2块,
1.一部分是放在内存里的,有一部分是放在磁盘上的,
内存里的东西放的是用户访问的URL(键)
真正的数据是存放在磁盘上的,存放在磁盘上市以哈希运算来存放的(值,path路径什么的)
只要访问这个url,就从磁盘上的这个path路径直接去找就可以了
但是真正的文件还是在磁盘里放着,通过路径才能去磁盘上找出真正存放的数据
存放的逻辑如下

在这里插入图片描述
而且命中率,访问几次,命中了都是在内存里记录的
在这里插入图片描述

在这里插入图片描述
过期的缓存信息就需要被处理,如后端服务器宕机了,正常请求过不来了,用户的缓存也过期了,就没法响应用户的请求了,如果发现即使过期,后端服务器已经宕机的情况下,可以考虑仍然使用过期的返回给用户
什么时候使用过期的缓存返还给用户,出现下面错误的时候,缓存过期总比没有强

在这里插入图片描述
还可以定义哪些方法市缓存的
GET和HEAD方法默认就是被缓存的,其他也可以定义针对哪些方法来进行缓存,post传数据一般不需要缓存

在这里插入图片描述
在这里插入图片描述
反向代理服务器也可以把一些header隐藏起来
在这里插入图片描述
发现数据报文有些想要隐藏起来,就可以在这里进行操作
隐藏后端服务器特定的报文,而nginx在响应报文中就已经把一些信息隐藏起来了,date,server,x-pad,x-accel
这就是后端服务器看不到真正的版本号的原因(我们的200客户是用的apache,不是nginx)

在这里插入图片描述
后端服务器和前端的代理服务器之间的超时时长,包括读的超时时长
在这里插入图片描述
现在如果把后端服务器的服务停了
在这里插入图片描述
看到的m.hml是来自于缓存,
在这里插入图片描述
反向代理服务器响应给客户端的还可以添加一些东西
客户端看到的信息可以是有一部分来自于反向代理服务器(反向代理服务器封装一些数据报文进去)

在这里插入图片描述
添加字段用 add_header server_addr是中间的反向代理服务器
就是把服务器端的地址返回给客户端,可以提示中间的反向代理服务器地址

在这里插入图片描述
在这里插入图片描述
缓存的命中率情况,到底是从反向代理服务器拿到的数据,还是后端的rs拿到的,这个地方都可以查到
servername就是,server名称了
现在在反向代理服务器上添加这部分内容,add_header就是添加的响应报文头部
启动服务器

在这里插入图片描述
nginx反向代理服务器添加配置加载
在这里插入图片描述
在这里插入图片描述
MISS说明缓存没有生效的是通过后端服务器来拿到的页面
第二次访问就HIT命中了

在这里插入图片描述
通过head信息,就能看到缓存和服务器的一些信息,有助于将来排错,和检查缓存命中率
也可以在尾部加

在这里插入图片描述
如何让nginx支持fastcgi,说白了就是支持PHP
在这里插入图片描述
实现lnmp
在这里插入图片描述
现在就需要装一个独立的fastcgi,php服务器
17上就是,不仅有php还有apache

在这里插入图片描述
删除apache
在这里插入图片描述
两边如果都是用http协议就叫同构
在这里插入图片描述
现在是异构代理,因为nginx服务器和fastcgi php程序用的是不一样的协议
在这里插入图片描述
现在来实现一下,监听有问题,需要修改
在这里插入图片描述
在这里插入图片描述
具体写一个ip地址也没关系,不写地址就代表监听本机的所有地址
在这里插入图片描述
允许谁访问
在这里插入图片描述
可以测试php的工作情况(apache有个status
判断php程序有没有活着,可以发pingpong包

在这里插入图片描述
就变到9000了
在这里插入图片描述
如何让nginx发请求到PHP服务器上,将来php程序都将放到fastcgi服务器上
创建一个目录放php

在这里插入图片描述
这个php服务器就算搭建号了,现在看看30.7,如何能支持fastcgi,链接php服务器
在这里插入图片描述
将来要用fastcgi,传输一些参数和值,传输的值过多也不用担心,系统已经有准备好的fastcgi参数了在这里插入图片描述
把nginx变量赋值到字符串里,利用fastcgi协议传输到php服务器
在这里插入图片描述
这一项很重要,将来要把前端发过来的php请求转发到后端fastcgi的哪个文件夹上,这个需要写清楚,
因为fastcgi存放php程序的路径是自己定义的,

在这里插入图片描述
这个路径是不对的,需要进行修改
在这里插入图片描述
在这里插入图片描述
修改配置文件
在这里插入图片描述
成功
在这里插入图片描述
在这里插入图片描述
可以把上面的一行去了,在那个包含的文件里面进行修改
在这里插入图片描述
在这里插入图片描述
修改内容
在这里插入图片描述
在这里插入图片描述
为了看出效果,把index.php文件调一些东西
在这里插入图片描述
在这里插入图片描述
请求没有过去
在这里插入图片描述

在这里插入图片描述
再主配置文件再加上规则
在这里插入图片描述
在这里插入图片描述
确实不一样filename和name在这里插入图片描述
成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了252 篇原创文章 · 获赞 6 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_42227818/article/details/90710582