• nginx的proxy代理缓存


    nginx本身就有缓存功能,能够缓存静态对象,比如图片、CSS、JS等内容直接缓存到本地,下次访问相同对象时,直接从缓存即可,无需访问后端静态服务器以及存储存储服务器,当然现在企业中大多数也是以redis作为缓存来使用,所以这里简单记录一下
    现在准备一台web服务器,一台nginx代理服务器,现在我们先配制好代理服务器

    http {
        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  /var/log/nginx/access.log  main;
    
        proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=10g
                         inactive=60m use_temp_path=off;
    
        sendfile            on;
        tcp_nopush          on;
        tcp_nodelay         on;
        keepalive_timeout   65;
        types_hash_max_size 2048;
    
        include             /etc/nginx/mime.types;
        default_type        application/octet-stream;
    
        include /etc/nginx/conf.d/*.conf;
    
        server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  _;
            root         /usr/share/nginx/html;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            location / {
    		
    		proxy_cache my_cache;
    		proxy_cache_key $host$uri$is_args$args;
    		proxy_cache_valid 200 304 302 1d;
    
    		proxy_pass http://192.168.50.132;
            }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        }
    }
    

    在http段里面配置好缓存的一些配置,比如配置存储位置,缓存文件大小等等。然后在location规则配置关于proxy_cache的相关配置。保存好,并reload一下。
    把web服务器也配置好,现在我们可以访问一下代理服务器

    第一次访问之后会把这些内容缓存起来,然后现在我们把web服务器关闭掉,再次访问网页,会发现依然可以访问。因为现在访问是从缓存里面拿取得数据。这就是缓存的作用。

    一些问题总结:
    1、使用tcp做代理,有什么方法获取真实客户端的ip地址?
    使用stream对tcp请求做代理,但是有个问题就是应用端拿不到客户端的真实IP,获取出来的IP是代理服务器的IP,请问有什么方法可以获取到客户端请求的真实IP吗?

    两个方案
    1、使用proxy_protocol协议,nginx作为客户端或者服务器时都支持该协议。第113课有详细介绍。
    2、使用IP透传DSR方案,需要修改上游服务的路由表,这节课在第4部分最后一节课,大概春节前会上线,你可以关注下。
    

    2、在做反向代理的时候,如果想启用gzip压缩,是应该在反向代理上做,还是web服务器上的nginx上配置?

    环境如果是nginx->nginx,前者是负载均衡的作用,后者是静态资源的作用的话,如果是这样,建议后者。
    

    3、生产环境如何判断是该使用nginx呢?还是openresty呢?
    如果不需要使用openresty提供的独有功能,那么尽量使用更稳定更轻量的nginx
    4、请问nginx的cache机制和http的Cache-Control头部在使用上是否有优先顺序,或是冲突的地方?
    有的,比如Nginx自定义的http头部优先级最高,其次是cache control,再次是cache valid指令,等等
    5、如果后端开启了gzip,同时后端的静态资源更新了,然后缓存还未失效,该如何处理呢?
    你是说上游资源更新了,但Nginx上缓存还未过期,该怎么办吗?
    如果缓存时间没到,那么客户端一定拿到过期缓存。如何设置缓存的定时更新倒是有很多办法,你可以参考第四部分课程。但如果定时设得过长,一定会导致用户使用到过期缓存,与gzip无关。
    6、我这边架构是nginx反向代理+nginx webserver+应用server 。1.webserver和应用server需要物理拆分吗?如果是物理拆分,只要在web server里指定fast_cgi ip(应用server):port 就可以把请求传给应用server吗?2.能否讲一下lnmp 架构拆分场景?3.nginx作为代理层和nginx web 层,他们的配置应该不一样吧?是否能够讲解一下具体配置?
    如果没有scalability需求,尽量不要拆分,每多一个环节,性能就会由于网络栈导致下降

  • 相关阅读:
    2017暑期集训Day 4
    2017暑期集训Day 5
    2017暑期集训Day 3
    Codeforces Round #433
    校内集训(20170906)
    校内集训(20170903)
    培训补坑(day10:双指针扫描+矩阵快速幂)
    培训补坑(day8:树上倍增+树链剖分)
    培训补坑(day7:线段树的区间修改与运用)(day6是测试,测试题解以后补坑QAQ)
    培训补坑(day5:最小生成树+负环判断+差分约束)
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/13554026.html
Copyright © 2020-2023  润新知