• Nginx cache


    Nginx有两类进程,一类称为Master进程(相当于管理进程),另一类称为Worker进程(实际工作进程)。
    利用epoll模型,基于事件响应,监听某个事件,处理后接着监听其他事件,直到事件到达后处理,不会一直等着,比如等一个http请求从建立连接到响应,占用一个线程,nginx可以一个线程处理多个连接,降低服务器压力

    OSI的7层从上到下分别是
    7 应用层 应用服务层HTTP服务
    6 表示层 不能系统间通信
    5 会话层 建立连接、管理会话
    4 传输层 提供端对端接口,TCP协议,保证完整性,UDP,保证速度
    3 网络层 IP寻址路由
    2 数据链路层 定义传输格式,校验格式
    1 物理层 设备

    现在的7层负载均衡,主要还是着重于应用HTTP协议,所以其应用范围主要是众多的网站或者内部信息平台等基于B/S开发的系统。 4层负载均衡则对应其他TCP应用,例如基于C/S开发的ERP等系统,4层负载均衡效率更高。

    【个人见解】针对nginx在7层网络模型的位置:nginx提供端对端的接口,如提供80端口给客户端,将请求代理给服务端某个ip和端口,因此它用到了网络层、传输层。它提供了建立连接、管理会话等功能,因此用到了会话层,nginx无视请求和响应放的系统差异,因此涵盖了表示层,通过nginx提供HTTP服务,因此还用到了应用层,其实应用层本就涵盖了下面几层,因此基于nginx的HTTP反向代理,是在网络层的应用层

     events 
    {
    										use epoll;
    										worker_connections 65535;
    }
    

    proxy_cache_path /export/nginx_cache/xs levels=1:2 keys_zone=xs_cache:5000m inactive=8h max_size=20g;
    keys_zone=xs_cache:5000m cache名称:共享内存大小为5G
    levels=1:2 表示两级目录
    inactive=8h 8小时无人访问就删除
    max_size:最大缓存时间

    upstream tomcat_1 {
    	server 127.0.0.1:80 weight=10 max_fails=2 fail_timeout=30s;
    }
    
        location ~* ^/x1/(2|3).*.html {
                proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header;
    	proxy_cache_use_stale error timeout;
    	proxy_cache xs_cache;
    	proxy_cache_valid  200 304  10m;
    	proxy_cache_key $host$uri;
    	proxy_pass http://tomcat_1;
    	//proxy_pass http://localhost:8091/;
    	}
    	
    	location ~ /purge(/.*)
    {
    				error_page 404 500 502 503 504 @purge_error;
    				set $var1 $1;
    				set $cache_key $host$var1$is_args$args;   //默认为静态资源,cache_key带参数
    				if ( $uri ~* .*.html$){
    								set $cache_key  $host$var1;  //html,cache_key不带参数
    				}
    
    				allow 10.0.0.0/8;
    				allow 172.0.0.0/8;
    				deny all;
    				proxy_cache_purge    xs_cache   $cache_key;
    }
    

    较高的Windows版本上无法测试cache模块

    关于fastcgi

    fastcgi对php等语言来说比较重要,对java来说,java服务端处理http请求参数不是通过cgi来实现。cgi(本身只是一个接口定义通用网关接口)是一个动态html处理程序,服务器如Nginx并不能处理动态的请求,因此将处理这些请求交给php实现的cgi程序来做,做好了返回给服务器,服务器再返回给客户端。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端,每次处理完一个请求后,程序会关闭,等另一个请求来的时候需要重启cgi进程,这样效率很低,fastcgi则是服务器提前启动几个cgi进程,他们被会分配来执行某个请求,执行完后进程也不会关闭,这是它由于cgi的原因。java的服务器并非像Nginx,而是诸如Tomcat,内部可以通过多线程完成类似CGI的功能,因此,我们不知道fastcgi有什么用,也没有怎么关注过。

  • 相关阅读:
    Web 存储之localStorage
    webpack之font-awesome
    vue-cli快速构建vue项目
    npm与cnpm混用导致的问题
    错误:linker command failed with exit code 1 (use -v to see invocation)
    mac 显示隐藏文件
    iOS 不要使用tag传递TableViewCell的indexPath值
    iOS background location
    github+hexo 搭建个站
    iOS CoreBluetooth
  • 原文地址:https://www.cnblogs.com/windliu/p/9724896.html
Copyright © 2020-2023  润新知