中山做app网站公司哪家好,wordpress 采集器,北京住总第一开发建设有限公司网站,wordpress博客系统安装教程一、http 协议反向代理
#xff08;一#xff09;反向代理示例:缓存功能
缓存功能可以加速访问#xff0c;如果没有缓存关闭后端服务器后#xff0c;图片将无法访问#xff0c;缓存功能默认关闭#xff0c;需要开启。
proxy_cache zone_name | off; 默认off
#指明调…
一、http 协议反向代理
一反向代理示例:缓存功能
缓存功能可以加速访问如果没有缓存关闭后端服务器后图片将无法访问缓存功能默认关闭需要开启。
proxy_cache zone_name | off; 默认off
#指明调用的缓存或关闭缓存机制;Context:http, server, location
#zone_name 表示缓存的名称.需要由proxy_cache_path事先定义proxy_cache_key string;
#缓存中用于“键”的内容默认值proxy_cache_key $scheme$proxy_host$request_uri;proxy_cache_valid [code ...] time;
#定义对特定响应码的响应内容的缓存时长定义在http{...}中proxy_cache_path;
#定义可用于proxy功能的缓存;Context:http 必须放在http语句中#调用缓存功能需要定义在相应的配置段如server{...};或者location等
proxy_cache proxycache;
proxy_cache_key $request_uri; #对指定的数据进行MD5的运算做为缓存的key
proxy_cache_valid 200 302 301 10m; #指定的状态码返回的数据缓存多长时间
proxy_cache_valid any 1m; #除指定的状态码返回的数据以外的缓存多长时间,必须设置,否则不会缓存proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ; #默认是off
#在被代理的后端服务器出现哪种情况下可直接使用过期的缓存响应客户端
#示例在http配置定义缓存信息proxy_cache_path /var/cache/nginx/proxy_cache #定义缓存保存路径proxy_cache会自动创建levels1:2:2 #定义缓存目录结构层次1:2:2可以生成2^4x2^8x2^82^201048576个目录keys_zoneproxycache:20m #指内存中缓存的大小主要用于存放key和metadata如使用次数,一般1M可存放8000个左右的keyinactive120s #缓存有效时间 max_size10g; #最大磁盘占用空间磁盘存入文件内容的缓存空间最大值 proxy_cache zone_name | off; 默认off
#指明调用的缓存或关闭缓存机制;Context:http, server, location
#zone_name 表示缓存的名称.需要由proxy_cache_path事先定义proxy_cache_key string;
#缓存中用于“键”的内容默认值proxy_cache_key $scheme$proxy_host$request_uri;proxy_cache_valid [code ...] time;
#定义对特定响应码的响应内容的缓存时长定义在http{...}中示例:proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;proxy_cache_path;
#定义可用于proxy功能的缓存;Context:http 必须放在http语句中
proxy_cache_path path [levelslevels] [use_temp_pathon|off]
keys_zonezone_name:size [inactivetime] [max_sizesize] [manager_filesnumber]
[manager_sleeptime] [manager_thresholdtime] [loader_filesnumber]
[loader_sleeptime] [loader_thresholdtime] [purgeron|off]
[purger_filesnumber] [purger_sleeptime] [purger_thresholdtime];#示例在http配置定义缓存信息proxy_cache_path /var/cache/nginx/proxy_cache #定义缓存保存路径proxy_cache会自动创建levels1:2:2 #定义缓存目录结构层次1:2:2可以生成2^4x2^8x2^82^201048576个目录keys_zoneproxycache:20m #指内存中缓存的大小主要用于存放key和metadata如使用次数,一般1M可存放8000个左右的keyinactive120s #缓存有效时间 max_size10g; #最大磁盘占用空间磁盘存入文件内容的缓存空间最大值#调用缓存功能需要定义在相应的配置段如server{...};或者location等
proxy_cache proxycache;
proxy_cache_key $request_uri; #对指定的数据进行MD5的运算做为缓存的key
proxy_cache_valid 200 302 301 10m; #指定的状态码返回的数据缓存多长时间
proxy_cache_valid any 1m; #除指定的状态码返回的数据以外的缓存多长时间,必须设置,否则不会缓存proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ; #默认是off
#在被代理的后端服务器出现哪种情况下可直接使用过期的缓存响应客户端#示例
proxy_cache_use_stale error http_502 http_503;proxy_cache_methods GET | HEAD | POST ...;
#对哪些客户端请求方法对应的响应进行缓存GET和HEAD方法总是被缓存 实验
① 主配置文件的http模块中添加配置
proxy_cache_path /data/nginx/proyxcache levels1:1:1 keys_zoneproxycache:20m inactive120s max_size1g; 7-1代理服务器
[rootlocalhost ~]# vim /apps/nginx/conf/nginx.conf
proxy_cache_path /data/nginx/proyxcache levels1:1:1 keys_zoneproxycache:20m inactive120s max_size1g;
#开启缓存 缓存路径 生成文件夹比例是3级 从内存中借调20M专门存放缓存 有效期120秒 最大存储空间为1g
[rootlocalhost ~]# mkdir /data/nginx/
[rootlocalhost ~]# nginx -t ② 子配置文件添加配置 proxy_cache proxycache;proxy_cache_key $request_uri;#proxy_cache_key $host$uri$is_args$args;proxy_cache_valid 200 302 301 10m;proxy_cache_valid any 5m; 去7-3配置拖入图片 ③ 去浏览器访问代理端 去7-1代理服务器查看缓存 如果把真实服务器关掉 再去浏览器访问还是可以访问到的这就是缓存用处哦 1如何清理nginx代理服务器缓存 方法1: rm -rf 缓存目录 方法2: 第三方扩展模块ngx_cache_purge 2自定义添加响应报文头部信息 Syntax: add_header name value [always];
Default;
Context: http,server,location,if in location#添加响应报文的自定义首部:
add_header name value [always];#示例:
add_header X-Via $server_addr; #当前nginx主机的IP
add_header X-Cache $upstream_cache_status; #是否缓存命中
add_header X-Accel $server_name; #客户访问的FQDNadd_header X-Via
add_header X-Cache
add_header X-Accel 小插曲虚拟机要在主配置文件夹写子配置子配置才可用 实验1自定义添加响应报文头部信息 add_header X-Via $server_addr; #当前nginx主机ip add_header X-Cache $upstream_cache_status; #是否缓存命中hit命中miss未命中add_header X-Accel $server_name; #客户端访问的FQDN add_header X-Via $server_addr;add_header X-Cache $upstream_cache_status;add_header X-Accel $server_name;
server {listen 80;server_name www.lucky.com;root /data/;proxy_cache proxycache;proxy_cache_key $request_uri;#proxy_cache_key $host$uri$is_args$args;proxy_cache_valid 200 302 301 10m;proxy_cache_valid any 5m;add_header X-Via $server_addr;add_header X-Cache $upstream_cache_status;add_header X-Accel $server_name;add_header cxk hero;location ~* /api {proxy_pass http://192.168.246.8;}location ~* \.(jpg|jpeg|png|gif|bmp)$ {proxy_pass http://192.168.246.9;}
}
① 添加子配置文件 ② 查看新增头部字段信息 二实现反向代理客户端 IP 透传 IP透传的定义Client客户端通过http服务访问192.168.246.7的代理服务器代理服务器通过proxy跳转至192.168.246.8后端真实服务器最后在Web后端真实服务器应该可以看到真实客户端的访问IP和代理服务器的IP。 实验1IP透传-------单向透传 7-1用nginx 7-2用apache ①在代理服务器7-1写配置文件
server{ listen 80; root /data/;server_name www.lucky.com;add_header X-Via $server_addr;add_header X-Cache $upstream_cache_status;add_header X-Accel $server_name;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;location / {proxy_pass http://192.168.246.8;}
} 当前访问192.168.246.7代理服务器跳转的是192.168.246.8后端真实服务器
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #添加客户端IP和反向代理服务器IP到请求报文头部
②在后端服务器真实服务器配置开启httpd服务关闭防火墙并实时查看访问日志 解释 ③ 客户端7-3访问代理服务器 我们使用第三台机器作为客户端通过代理服务器去访问后端真实服务器 再去查看日志 显示了真实的访问主机的ip地址开启ip透传后可以查看到客户端ip 实验2IP透传----------多级代理 三台主机均为nginx服务 ①去7-1代理服务器配置
server{listen 80;root /data/;server_name www.lucky.com;add_header X-Via $server_addr;add_header X-Cache $upstream_cache_status;add_header X-Accel $server_name;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;location / {proxy_pass http://192.168.246.8;}
} ②去7-2代理服务器配置
[rootzzzcentos2 ~]#systemctl stop httpd
[rootzzzcentos2 ~]#yum install epel-release -y
[rootzzzcentos2 ~]#yum install nginx -y
[rootzzzcentos2 ~]#systemctl restart nginx
[rootzzzcentos2 ~]#systemctl stop firewalld
[rootzzzcentos2 ~]#setenforce 0
[rootzzzcentos2 ~]#systemctl stop httpd
[rootzzzcentos2 ~]#systemctl restart nginx
[rootzzzcentos2 ~]#vim /etc/nginx/nginx.conf
[rootzzzcentos2 ~]#nginx -s reload
[rootzzzcentos2 ~]#systemctl restart nginx
[rootzzzcentos2 ~]# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #添加客户端IP和反向代理服务器IP到请求报文头部 ③ 后端服务器7-3新建web文件
[rootzzzcentos3 html]#cd /usr/share/nginx/html
[rootzzzcentos3 html]#echo welcome 7-3 index.html
[rootzzzcentos3 html]#cat index.html
welcome 7-3 ④检测 ⑤查看日志 三http反向代理负载均衡
在上一个节中Nginx可以将客户端的请求转发至单台后端服务器但是无法转发至特定的一组的服务器而且不能对后端服务器提供相应的服务器状态监测
Nginx 可以基于ngx_http_upstream_module模块提供服务器分组转发、权重分配、状态监测、调度算法等高级功能
配置格式
#自定义一组服务器配置在http块内
upstream web { server 192.168.91.100 调度算法server 192.168.91.101
}location / {
pass_proxy http://web/
}
官方文档 https://nginx.org/en/docs/http/ngx_http_up
server address [parameters];
#配置一个后端web服务器配置在upstream内至少要有一个server服务器配置。
#server支持的parameters如下
weightnumber #设置权重默认为1,实现类似于LVS中的WRR,WLC等
max_connsnumber #给当前后端server设置最大活动链接数默认为0表示没有限制
max_failsnumber #后端服务器的下线条件,当客户端访问时,对本次调度选中的后端服务器连续进行检测多少次,如果都失败就标记为不可用,默认为1次,当客户端访问时,才会利用TCP触发对探测后端服务器健康性检查,而非周期性的探测
fail_timeouttime #后端服务器的上线条件,对已经检测到处于不可用的后端服务器,每隔此时间间隔再次进行检测是否恢复可用如果发现可用,则将后端服务器参与调度,默认为10秒
backup #设置为备份服务器当所有后端服务器不可用时,才会启用此备用服务器 sorry server 自己不能转自己
down #标记为down状态
resolve #当server定义的是主机名的时候当A记录发生变化会自动应用新IP而不用重启Nginxhash KEY [consistent];
#基于指定请求报文中首部字段或者URI等key做hash计算使consistent参数将使用ketama一致性hash算法适用于后端是Cache服务器如varnish时使用consistent定义使用一致性hash运算一
致性hash基于取模运算
hash $request_uri consistent; #基于用户请求的uri做hash
hash $cookie_sessionid #基于cookie中的sessionid这个key进行hash调度,实现会话绑定ip_hash;
#源地址hash调度方法基于的客户端的remote_addr(源地址IPv4的前24位或整个IPv6地址)做hash计算以实现会话保持least_conn;
#最少连接调度算法优先将客户端请求调度到当前连接最少的后端服务器,相当于LVS中的WLC 实验拓朴草图 我们做实验为了看到效果所以内容不一样 真实环境中内容是一样的 负载均衡 实验拓朴图 apache后端服务器开启httpd服务关闭防火墙分别建立web文件 [rootzzzcentos3 ~]#systemctl stop nginx
[rootzzzcentos3 ~]#systemctl start httpd
[rootzzzcentos3 ~]#cd /var/www/html/
[rootzzzcentos3 html]#echo welcome to 7-3 index.html
[rootzzzcentos3 html]#cat index.html
welcome to 7-3 调度算法 ①实验轮询算法 一人一次 默认算法是轮询算法即反向代理服务器处理用户请求时每个后端服务器都轮流提供响应 17-1代理服务器编辑主配置文件 2apache后端服务器开启httpd服务关闭防火墙分别建立web文件 检测 如果有一天服务器宕机 那么只会跳转好的那一台服务器 当其中一台宕机就不去访问他了直接跳过 那是因为 nginx 有 健康性检测 机制 就不去坏的服务器了 nginx服务较为只能通过tcp三次握手可以检查服务器健康性当无法完成连通性默认将不会访问从而提示报错。当故障服务器恢复正常后再次轮巡调度。 ② 加权轮询算法
在默认轮询的基础上增加权重weightnumber。如果后端有2个服务器其中一个配置权重为weight5另外一个不配置默认是1则有用户访问时分配给给有权重的服务器和不配置权重的服务器的比例为5:1
修改7-1代理服务器配置 检测客户端7-1访问代理服务器 ③最大链接数、连续检测和延迟上线 max_fails3 ###连你3次没反应就认为你宕机了 fail_timeout30 ###上线后给一个延迟时间30s然后再连你 max_conns10 ###最大连接数只给你连10个 backup #设置为备份服务器当所有后端服务器不可用时,才会启用此备用服务器 sorry server 自己不能转自己 20 upstream web {21 server 192.168.246.8;22 server 192.168.246.9 max_conns10 max_fails3 fail_timeout30s;23 }
#max_connsnumber #给当前后端server设置最大活动链接数默认为0表示没有限制
#max_failsnumber 后端服务器的下线条件,当客户端访问时,对本次调度选中的后端服务器连续进行检测多少次,如果都失败就标记为不可用,默认为1次,当客户端访问时,才会利用TCP触发对探测后端服务器健康性检查,而非周期性的探测
#fail_timeouttime 后端服务器的上线条件,对已经检测到处于不可用的后端服务器,每隔此时间间隔再次进行检测是否恢复可用如果发现可用,则将后端服务器参与调度,默认为10秒。这样避免服务器刚上线不稳定再次导致业务失败
④备份服务器
当所有后端服务器不可用时才会启用此备用服务器sorry server自己不能转自己。
upstream web {hash $remote_addr;server 192.168.246.8;server 192.168.246.9 backup;} 检测客户端7-3访问代理服务器7-2 7-2或7-1做客户机都可以 如果服务器宕机就会启用备用服务器 如果需要维护具体看看在哪台写可以写入写内容 ⑤hash调度操作
1ip hash根据客户端ip ip hash $remote_addr 客户端真实ip 基于客户端IP地址的负载均衡算法。它会根据客户端的IP地址将该客户端的所有请求都发送到同一个后端服务器上。这样可以保证同一个客户端的所有请求都被发送到同一个后端服务器从而保证了会话的一致性。 upstream web {hash $remote_addr;server 192.168.246.8;server 192.168.246.9;}
① 修改代理服务器配置 ② 客户端访问 hash算法会将Web页面访问的缓存定在某一个代理服务器但是hash算法有一个缺点就是hash还要除以权重下次重载配置会更换Web服务的代理服务器 2 url hash 20 upstream web { 21 hash $request_uri; #发送请求的地址一旦确定不会轻易改变22 server 192.168.246.8;23 server 192.168.246.9;24 }
① 修改代理服务器配置 ② 客户端访问 3cookie
upstream web {hash $cookie_hello;server 192.168.246.8;server 192.168.246.9;}
① 修改代理服务器配置 ② 客户端模拟加上cookie访问 也是固定会话 4 fair
基于后端服务器的负载均衡算法。它会根据后端服务器的响应时间将请求发送到响应时间最短的服务器上。这样可以保证请求被发送到处理能力最强的服务器上从而提高系统的性能
二、总结
1、负载均衡
http {upstream web {server 192.168.246.8server 192.168.246.9}server {location / {proxy_pass http://web/;}
}
}
2、调度算法 3、ip透传 4、httpd服务和nginx服务开启问题 三、stream 服务模块
官网 stream 实现反向代理功能 是四层模块只能控制tcp、udp (实现反向代理功能包括TCP协议代理) stream和http模块是同级 四层代理和七层代理的区别 4层是指传输层的 TCP/UDP 协议 7层是指应用层的 HTTP 协议 代理原理: 4层代理使用 NATNetwork Address Translation技术即网络地址转换。即请求进来的时候nginx 只修改数据包里面的目标IP、源IP、端口然后就直接把数据包发给目标服务器即nginx不知道请求的具体内容目标服务器处理完成后发给 nginxnginx 数据包再做一次类似的修改就返回给请求的客户端了。 7层代理nginx 读取并解析 Http 请求内容然后将具体内容(请求行、请求头、空行、请求数据)转发到相应的服务器转发的过程是建立和目标机器的连接然后转发请求收到响应数据再转发给请求客户端。