nginx的proxy模块、proxycache缓存、upstream定义集群

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: nginx的proxy模块、proxycache缓存、upstream定义集群

一、基于nginx将客户端请求反向代理至后端服务器:
1、proxy_pass指令只能用于location上下文:

  1. proxy_pass 后面的路径不带URI时,将会把location的URI传递给后端主机,如location /img/ {
    proxy_pass http://172.18.224.101;

}
客户端请求的URL被这个location匹配时,请求的资源为后端服务器172.18.224.101/img/

b.proxy_pass 后面是一个URI时,将会把location的URI替换掉,如
如location /img/ {
proxy_pass http://172.18.224.101/bbs/;
}
客户端请求的URL被这个location匹配时,请求的资源为后端服务器172.18.224.101/bbs/

c.如果location定义时使用了正则表达式匹配时,proxy_pass后面不能使用URI,否则将被认定为语法错误:
location ~|~* PATTERN {
proxy_pass http:172.18.224.101;
}

2、proxy_set_header filed value;
使用proxy_pass反向代理后,后端资源服务器日志默认记录的是反代服务器的请求信息,这种日志不是我们想要的,期望记录的日志是真正客户端请求资源的信息,可通过proxy_set_header指令达到目的,如让后端服务器记录客户端的IP:
a.在nginx的http上下文或者server里定义,proxy_set_header X-RIP $remote_addr ###X-RIP自定义一个真正的客户端IP字段,其值为nginx内建的变量remote_addr
b.更改后端服务器的web日志格式,如改httpd日志格式
10
将刚才定义的X-RIP替换掉%h即可
11
这样后端日志将记录真正客户端的信息,要是想记录其他信息也可以自己定制

3、nginx的proxy反代缓存配置及调用:
nginx的反向代理缓存一般在http上下文定义,然后在location模块中调用

  1. http配置如proxy_cache_path /data/cache/nginx levels=2:2 keys_zone=nginxcache:20M inactive=1d max_size=1g;###proxy_cache_path 定义缓存目录,levels=2:2定义缓存目录结构,keys_zone=nginxcache:20M定义缓存空间及大小,inactive定义失效时间
    b.location上下文调用缓存配置:

12
proxy_cache nginxcache ###调用缓存,value跟上文http定义的keys_zone名称
proxy_cache_key $request_uri###用请求的url定义缓存键
proxy_cache_valid 200 301 302 1d;####定义缓存类型及时间

4、nginx反向代理的其他配置:
a.proxy_conect_timeot 75;##与后端主机发送响应报文的超时时长,最长75秒
b.proxy_send_timeout ##向后端主机发送请求报文的超时时长,默认60秒

5、ngx_http_header_module

  1. add_header X-via $server-addr ###向响应报文添加自定义首部并赋值
  2. add_header x-cache $upstream_cache_status ####HIT缓存命中,miss缓存未命中
    5、nginx的upstream模块

upstream主要是将多个后端主机定义为服务器组,而后有proxy_pass,fastcgi_pass等进行引用。只能用在http上下文

  1. upstream webserver {
    server 172.18.224.101###可选参数有weight服务器的权重,max_fails=3定义最大失败尝试次数,backup定义该主机为备用主机,down手动使该主机下线

}
15

定义完upsteam后在location调用即可:
proxy_pass http://webserver; ###调用upstream定义的名字

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2月前
|
缓存 Java
java开发常用模块——缓存模块
java开发常用模块——缓存模块
|
2月前
|
存储 缓存 Java
Openresty(lua+nginx)-Guava-Redis做多级缓存
Openresty(lua+nginx)-Guava-Redis做多级缓存
36 1
|
2月前
|
缓存
node中的优先从缓存中加载模块与模块的加载规则
node中的优先从缓存中加载模块与模块的加载规则
|
2月前
|
网络协议 应用服务中间件 nginx
解决 nginx 启动错误host not found in upstream "XXXX.com“
在前置机上利用nginx进行反向代理的时候,我们会配置proxy_pass。在启动nginx的会报如下错误:host not found in upstream "XXXX.com“
1442 0
|
2天前
|
缓存 负载均衡 NoSQL
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
8 1
|
2月前
|
缓存 NoSQL Redis
实现缓存集群与事务处理
【5月更文挑战第11天】Redis 集群和插槽分片实现主从复制,确保数据一致。哨兵Sentinel提供高可用性,监控主从服务器并在故障时切换。分布式集群支持1000节点,采用分片、复制和故障转移。集群使用异步复制,牺牲强一致性以保证性能。消息转发通过PUBLISH/SUBSCRIBE实现,支持事务和Lua脚本,提供慢查询日志和Monitor监控。集群通过节点握手、槽位分配、MOVED/ASK错误处理确保可靠性。
132 1
实现缓存集群与事务处理
|
2月前
|
负载均衡 应用服务中间件 nginx
解决nginx配置负载均衡时invalid host in upstream报错
在Windows环境下,配置Nginx 1.11.5进行负载均衡时遇到问题,服务无法启动。错误日志显示“invalid host in upstream”。检查发现上游服务器列表中,192.168.29.128的主机地址无效。负载均衡配置中,两个服务器地址前误加了"http://"。修正方法是删除上游服务器列表和proxy_pass中的"http://"。问题解决后,Nginx服务应能正常启动。
109 4
解决nginx配置负载均衡时invalid host in upstream报错
|
2月前
|
存储 运维 负载均衡
Heartbeat+Nginx实现高可用集群
通过Heartbeat与Nginx的结合,您可以建立一个高可用性的负载均衡集群,确保在服务器故障时仍能提供无中断的服务。这种配置需要仔细的计划和测试,以确保系统在故障情况下能够正确运行。
32 2
|
2月前
|
缓存 算法 应用服务中间件
nginx 反向代理 与缓存功能
nginx 反向代理 与缓存功能
|
2月前
|
应用服务中间件 nginx
nginx配置集群轮训策略
nginx配置集群轮训策略
641 0