本文共 3630 字,大约阅读时间需要 12 分钟。
实现反向代理,后端的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 成功转载地址:http://lfkgn.baihongyu.com/