什么是代理?
代理一词往往并不陌生, 该服务我们常常用到如:代理理财、代理租房、代理收货等等。
没有代理:
客户端直接请求服务端,服务端直接响应客户端。
有代理:
在实际互联网请求时,客户端因为种种原因,往往无法直接向服务端发起请求,需要使用代理服务帮助客户端请求服务端。
按应用场景划分:代理分为正向代理、反向代理
正向代理
用于内部上网中,客户端<-->代理-->服务端
反向代理
用于公司集群架构中,客户端-->代理<-->服务端
正向代理与反向代理的区别
形式上服务的”对象”不一样
正向代理代理的对象是客户端,为客户端服务
反向代理代理的对象是服务端,为服务端服务
Nginx反向代理使用协议
模块总结
模块允许将请求传递到另一台服务器。
URL可以是:
URL最后不以结尾,直接访问目的主机块的uri下的文件,功能类似 root,常用
URL最后以结尾,直接访问此uri下的文件,功能类似 alias,不常用
注意:后面路径不带uri时,会将块的uri传递(附加)给后端主机
假设代理服务器返回了头部字段“ ”
将头部字段字符串重写为“ ”。
常用请求头:
是模块提供的嵌入式变量,表示“X-Forwarded-For”客户机请求头字段,并附加变量,用逗号分隔,格式如下:。如果客户端请求标头中不存在“ X-Forwarded-For”字段,则该变量等于变量。
启用或禁用代理服务器响应的缓冲。
启用缓冲后,nginx会尽快从代理服务器收到响应,并将其保存到proxy_buffer_size和proxy_buffers指令设置的缓冲区中 。如果整个响应都无法容纳到内存中,则可以将一部分响应保存到磁盘上的临时文件中。写入临时文件由 proxy_max_temp_file_size和 proxy_temp_file_write_size指令控制。
禁用缓冲后,响应一收到就立即传递给客户端。nginx不会尝试从代理服务器读取整个响应。nginx一次可以从服务器接收的最大数据大小由proxy_buffer_size指令设置。
设置不同响应码的内容的缓存时间。例如
为代码200和302的响应设置10分钟的缓存,为代码404的响应设置1分钟的缓存。
不指定响应码,默认仅缓存200、301和302响应。
指定缓存任何响应。
直接在响应头中设置,优先级比使用设置的高。
定义用于缓存的密钥,用于“键”,例如
默认情况下,指令的值接近字符串
定义用于缓存的共享内存区域。同一区域可以在多个地方使用。参数值可以包含变量。禁用从之前配置级别继承的缓存。
设置缓存的路径和其他参数。缓存数据存储在文件中,会自动创建。
高速缓存文件名是的MD5校验值。
参数定义高速缓存的目录层次结构级别:从1到3,每个级别接受值1或2。例如,1:2:2可以生成24x28x2^8=1048576个目录
指定内存中缓存的大小,用于存放所有活动密钥key和有关数据metadata(如:使用次数),1 MB可以存储大约4000个密钥。
在参数指定的时间内未访问的缓存数据,直接删除。默认10分钟。
和参数设置缓存文件占用的最大和最小可用磁盘空间,当超出大小或没有足够的可用空间时,它将删除最近最少使用的数据。
例如,配置
生成缓存文件名:
首先将缓存的响应写入临时文件,然后重命名该文件。可以将临时文件和缓存放在不同的文件系统上,但这会导致文件复制了两份。建议将高速缓存和临时文件存放目录放在同一文件系统上。
临时文件的目录是参数设置的。默认为,使用proxy_temp_path指令设置的目录。设为,则临时文件将直接放置在缓存目录中。
指定被代理的后端服务器出现哪种情况,可直接使用过期的缓存响应客户端。与指令的参数匹配 。
如果无法选择代理服务器来处理请求,响应旧缓存。
如果在更新缓存时,响应旧缓存。这样可以在更新缓存的数据时最大程度地减少对代理服务器的访问次数。
响应标头中指定超时秒数,超时使用旧缓存响应。比使用的优先级低。
使用在更新缓存时最大程度地减少对代理服务器的访问次数。
指定对哪些客户端请求方法对应的响应进行缓存,GET和HEAD方法总是被缓存。
创建配置文件:
创建缓存目录,重载
访问页面,记录缓存,查看缓存目录文件结构
禁止指定头部字段从代理服务器传递到客户端。
允许指定头部字段从代理服务器传递到客户端。
注意:nginx默认不会将代理服务器的响应中的头部字段“ Date”,“ Server”,“ X-Pad”和“ X-Accel -...”传递给客户端。
- 修改配置文件:
允许将“ Expires”和“ Cache-Control”头字段以及任意字段添加到响应头中。
如果响应代码等于200、201,204、206、301、302、303、304、307或308,则将指定的字段添加到代理服务器返回客户端的响应报文的头部。参数值可以包含变量。表示无论响应代码如何,都添加字段。
如果响应代码等于200、201、206、301、302、303、307或308,则将指定的字段添加到代理服务器返回客户端的响应报文的末尾。参数值可以包含变量。表示无论响应代码如何,都添加字段。
重载查看头部文件:
X-Cache缓存命中效果,第一次访问时,没有缓存,不会命中:第二次访问时,此时已经有缓存,会命中
设置用于代理的HTTP协议版本。默认1.0版。建议将1.1版与连接和NTLM身份验证配合使用。
设置与后端服务器建立连接的超时时长,如超时会出现502错误,一般不建议超出75s。
注意:转发超时时间是模块提供的
对后端服务器send,将请求发送给后端服务器的超时时长。超时仅在两个连续的写操作之间设置,而不用于整个请求的传输。超时连接将关闭。
从后端服务器read,等待后端服务器发送响应报文的超时时长。超时仅在两次连续的读取操作之间设置,而不用于传输整个响应。超时连接将关闭。
确定当客户端在不等待响应的情况下中断请求关闭连接时,是否应关闭nginx服务器中断其对后端服务器的请求。
设为on,则nginx会忽略客户端中断,并一直等着代理服务执行返回;
设为off,则客户端中断后,nginx也会中断其对后端服务器的请求,并立即记录499日志。
设置proxy_hide_header和proxy_set_header需要使用的hash表(nginx用来保存HTTP报文头的hash表)的储存桶的大小
设置proxy_hide_header和proxy_set_header需要使用的hash表(nginx用来保存HTTP报文头的hash表)的最大大小
注意:在开始和每次重新配置期间,nginx都会选择哈希表的最小可能大小,以使存储具有相同哈希值的键的存储桶大小不会超过哈希存储桶大小。表的大小以存储桶表示。再继续进行调整,直到表大小超过哈希最大大小参数为止。因此,如果需要增加,请首先调整最大大小。
环境准备
web01配置:
lb01配置:
windows配置:
在文件中添加一行
从图中可以看出,当我们仅用配置代理时,会有如下问题:
10.0.0.1请求10.0.0.5的时候用的是域名,协议是HTTP/1.1
10.0.0.5请求10.0.0.7的时候用的是IP:port,协议是HTTP/1.0
10.0.0.7的nginx访问日志只显示代理服务器的地址
在生产环境中,我们必须要记录客户端的来源IP,如果所有的访问日志,全都来源于代理,那么我们根本不知道都有哪些地区的用户访问了我们什么页面。
模块可以解决这些问题:
使用主机名
使用HTTP/1.1协议
记录客户端来源IP
lb01修改配置,重载nginx:
lb01配置代理web01的wordpress和wecenter
windows修改hosts测试:
在文件中,