【愚公系列】2022年04月 .NET架构班 031-分布式中间件 Nginx多场景使用问题分析之代理缓存

举报
愚公搬代码 发表于 2022/04/01 00:04:57 2022/04/01
【摘要】 一、Nginx多场景使用问题 1.代理缓存情况:当客户端给Nginx发送查询商品的请求时,Nginx把请求转发给5001 和 5002 ,如果转发到5001和5002,两个实例处理能力达到极限的时候,如何更高提升系统性能场景?方案:代理缓存#user nobody;worker_processes 1;#error_log logs/error.log;#error_log log...

一、Nginx多场景使用问题

1.代理缓存

情况:当客户端给Nginx发送查询商品的请求时,Nginx把请求转发给5001 和 5002 ,如果转发到5001和5002,两个实例处理能力达到极限的时候,如何更高提升系统性能场景?

方案:代理缓存

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
	log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    proxy_cache_path /cache/nginx/ levels=1:2 keys_zone=mycache:64m;
    limit_conn_zone $server_name zone=perserver:10m;
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            limit_conn perserver 1;
            proxy_cache mycache;
            proxy_pass  http://YDT.EBusiness;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_cache_methods GET HEAD;
            proxy_cache_revalidate on;
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 404 1m;
            proxy_cache_valid any 1m;
            proxy_cache_min_uses 1;
            proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    #动态负载均衡配置
    upstream YDT.EBusiness{
        ip_hash;
        server localhost:5001 max_fails=2 fail_timeout=10s;
        server localhost:5002 max_fails=2 fail_timeout=10s;
        server localhost:5003 backup;
    }
}

2.参数详解

proxy_cache_path /cache/nginx/ levels=1:2 keys_zone=mycache:64m;
#proxy_cache_path 为缓存存放路径;
#levels的第一位表示使用1级子目录冒号隔开第二位表示使用2级子目录,其最多使用三级,1表示每个一级子目录的名字只能使用1个字符;
#key_zone中的mycache为缓存名字,可以在location或者server中通过proxy_cache引用;64m表示用多少内存空间存储nginx key;
proxy_cache mycache;
#引用mycache缓存空间;
proxy_pass http://192.168.123.34:80/;
#将来自 / 的请求代理至192.168.123.34:80 该服务器,后面的 ‘/’ 是必须的;
proxy_set_header Host $host;
#用于后端的real server区分不同的虚拟主机;
proxy_set_header X-Real-IP $remote_addr;
#记录客户端真实ip地址,而不是代理服务器地址,需要后端web服务器开启日志相应功能接收;
proxy_cache_methods GET HEAD;
#表示对客户端请求的GET 和 HEAD方法进行缓存;
proxy_cache_revalidate on;
#本地缓存过期会检查后端服务器该缓存是否存在,避免后端重传占据带宽;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_valid any 1m;
#针对于不同的响应码进行缓存不同的时间设定;
proxy_cache_min_uses 1;
#某一个请求被响应多少次才会被缓存,默认是1,可以将该值设置为大一些;
proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;
#指明哪种场景可以使用过期缓存,提升用户体验;

补充:

proxy_hide_header;
#隐藏由proxy响应客户端时指定的首部;
proxy_buffer 4|8k
#为了响应客户端更快,服务器端响应客户端可能分成多个ip报文响应,也可以整合在一起再一次响应;

Nginx缓存是键值存储,URL是键,文件路径是值。键值存储的速度就是加快在文件系统中查找的速度。所以,存储的key是哈希过的值。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。