实现反向代理,后端的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
成功