一、代理原理
1、正向代理与反向代理
(1) 正向代理:内网客户机通过代理访问互联网。
客户端向代理发送请求并指定目标,代理向服务器转交请求并将获得的内容返回给客户端。正向代理可以隐藏客户端的身份和位置,绕过访问限制。
(2) 反向代理:外网用户通过代理访问内网服务器。
代理服务器在接收到客户端的网络访问连接请求,将请求有策略地转发给网络中实际工作的业务服务器,并将业务服务器处理的结果返回给发起连接请求的客户端。反向代理可以隐藏目标服务器的真实身份和位置,客户端只能看到反向代理的IP地址。
二、Proxy 代理
1、模块:ngx_http_proxy_module
2、Proxy 代理实验
(1) nginx 服务器启动网站(192.168.198.133)
vim /usr/share/nginx/html/index.html 为 nginx 服务器配置默认网页
(2) nginx 代理服务器配置(192.168.198.132)
location / {
proxy_pass http://192.168.198.133:80;
proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
}
① 代理:代理服务器所推送的后端服务器的 URL
proxy_pass http://192.168.198.133:80; 真正的nginx服务器的IP地址
proxy_redirect default; nginx在处理代理请求时保持默认端口
② 头信息:设置真实客户端地址,让代理器把客户端地址传给服务器,在服务器日志中形成记录
proxy_set_header Host $http_host; 将代理服务器发送的请求头部客户端的请求头部设置一致
proxy_set_header X-Real-IP $remote_addr; 记录客户端真实ip地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 记录代理地址
③ 超时时间
proxy_connect_timeout 30; 后端服务器连接的时间
proxy_send_timeout 60; 后端服务器数据传回的时间
proxy_read_timeout 60; 代理服务器接收后端服务器数据的时间
④ 缓冲区的大小和数量
proxy_buffering 开启的情况下,nignx会把业务服务器一部分资源先放到缓冲区中,当用户需要访问时,代理服务器直接交给用户,不需要再访问业务服务器
proxy_buffering on;
proxy_buffer_size 32k; 缓冲区大小
proxy_buffers 4 128k; 缓冲区数量
proxy_busy_buffers_size 256k; 忙碌缓冲区大小
proxy_max_temp_file_size 256k;
(3) 使用客户机访问代理服务器地址
观察 nginx 服务器日志:
192.168.198.132 - - [17/Sep/2023:00:07:25 +0800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.31" "192.168.198.1"
三、Proxy 缓存
1、缓存类型:
① CDN(Content Delivery Network,内容分发网络)
通过在全球各地边缘节点部署服务器群,由CDN服务器分担源站点服务器的压力,用户可以就近获取已缓存的访问资源,避免网络拥堵,加快访问速度。
CDN服务由专业的供应商提供,企业和组织只需注册使用CDN服务,将其内容通过CDN向全球分布的节点传送即可。
② 数据库缓存:
数据库缓存是指将数据存储在内存中,减少对数据库的访问次数,从而提高数据访问速度。常见的数据库缓存技术有 Memcache 和 Redis。
③ nginx-proxy
nginx-proxy是一种基于Nginx的代理服务器,可以用来实现网页缓存。通过配置nginx-proxy,将已经访问过的网页内容存储在本地,以便在下次访问时可以直接从本地读取,不需要再次访问后端服务器。这种技术可以大大提高网页加载速度,减轻服务器的负载。
2、启动缓存
(1) 配置缓存服务器
① vim /etc/nginx/nginx.conf 配置缓存区的规则:
proxy_cache_path /app/bean/cache levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=60m use_temp_path=off;
● proxy_cache_path /app/bean/cache 缓存数据的存储位置
● levels=1:2 两级层次结构的目录,各个用户的缓存信息存在独立的目录下
● keys_zone=proxy_cache:10m 缓存区的规则名称 (proxy_cache)
:10m 存储缓存键keys的空间,缓存键的作用是帮助缓存系统快速定位和检索数据
● max_size=10g 存储缓存的数据最大为10g
● inactive=60m 不活跃时间60分钟,如果一个文件在60分钟内没有被请求,则缓存管理会自动删除
② vim /etc/nginx/conf.d/default.conf
proxy_cache proxy_cache;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m;
proxy_cache_key $host$uri$is_args$args;
add_header Nginx-Cache "$upstream_cache_status";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
● proxy_cache proxy_cache; 代理器缓存命令 用户自定义的缓存区规则名称
● proxy_cache_valid 200 304 12h; proxy_cache_valid any 10m;
返回状态码为 200 和 304 的数据,可以缓存12h;其他状态码的数据只缓存10分钟。
● proxy_cache_key $host$uri$is_args$args;
缓存区里存储的域名链接很多,且每一个域名链接很长,难以查找,
于是通过哈希算法 (hash) ,将 URL 换算成一串 长度固定,内容唯一 的值,将这串值作为缓存区里对应链接的 key;
当用户来访问时,nginx 代理服务器将用户的 URL 换算成 key,与缓存区里存储的 key 值进行比对,比对成功,说明用户上一次访问在代理服务器里存储过,内容可以由代理服务器直接回给用户 ;比对失败,说明没有缓存,用户请求会推送给后端服务器。
● add_header Nginx-Cache "$upstream_cache_status";
资源返回给用户时显示缓存状态(HIT or miss),是在缓存中获取的数据还是在真实服务器中获取的数据。
●proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
http 返回状态码 5xx 时 (服务器错误状态码),说明后端服务器出现故障,代理服务器会把用户请求转给其他后端服务器。
(2) 客户机访问代理服务器地址
HIT 表示代理服务器存在页面缓存 ;若显示 miss 则表示无缓存。