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有什么用,也没有怎么关注过。

posted on 2018-09-29 17:26  j.liu windliu  阅读(112)  评论(0编辑  收藏  举报