Nginx-场景实践一、Nginx作为静态资源Web服务一、动态资源与静态资源如果客户端请求的页面是静态网页,服务器会直接响应静态的内容网页到客户端。如果客户端请求动态网页,服务器需要先将动态网页替换为静态网页,然后将转换后的静态网页响应给客户端静态资源的几种浏览器渲染:HTML、CSS、JAVASCRIPT图片:JPEG、GIF、PNG...视频:FLV、MPEG...文件:TXT等任何下载文件和稳定性瓶颈和链接,让内容传输更快更稳定。通过在网络中各处放置节点服务器的基础上,在现有互联网的基础上放置一层智能虚拟网络,CDN系统可以实时根据网络流量和各节点的连接情况、负载状况、到用户和响应时间等综合信息,将用户的请求重定向到离用户最近的服务节点。其目的是使用户就近获取所需内容,解决Internet网络拥堵情况,提高用户访问网站的响应速度。3.配置语法sendfile(文件读取)配置语法:sendfileon|off;默认:no上下文:http,server,location,ifinlocationtcp_nopush(启用sendfile时,提高网络包的传输效率)配置语法:tcp_nopushon|off;default:no上下文:http,server,locationtcp_nodelay(keepalive连接下,提高网络包的实时传输)配置语法:tcp_nodelyon|off;默认值:无上下文:http、服务器、位置gzip(压缩)配置语法:gzipon|off;默认值:无上下文:http,服务器,位置,如果在位置gizp_comp_level(压缩比)配置语法:gzip_comp_level级别;默认值:无;上下文:http、服务器、位置gzip_http_version(gziphttp版本)配置语法:gzip_http_version1.0|1.1;默认值:无上下文:http、服务器、位置gzip_static(预读gzip函数)配置语法:gzip_staticon|off|always;默认值:gzip_static关闭;上下文:http、server、location4、浏览器缓存HTTP协议定义的缓存机制(如:Expires;Cache-control等)浏览器无缓存:浏览器??请求→无缓存→请求WEB服务器→请求响应,协商→向客户端呈现缓存的浏览器请求→缓存→检查过期→Presentation验证过期机制验证方法对应头信息验证过期Expires,Etag头信息验证在Cache-Control(max-age)协议EtagLast-Modified有信息验证Last-Modified第一个请求:No第二个请求:expires(responseheadersaddCache-Control,Expires)配置语法:expires[modified]time;期满|max|off;默认值:过期关闭;上下文:http,server,location,ifinlocation5,跨站访问Nginx如何开启跨站访问?Access-Controller-Allow-Originadd_header配置语法:add_headernamevalue[always];default:noContext:http,server,location,如果locationname中可以是Access-Controller-Allow-Origin和Access-Controller-Allow-Method6,基于http_refer的防盗链防盗链配置模块配置语法:valid_referersnone|阻塞|服务器名称|字符串...;Default:noContext:server,locationvalid_referersnoneblockedIPif($invalid_referer){return403;}提示:可以使用curl测试配置好防盗链:curl-e"http:www.baidu.com"-IIP2、nginx作为代理服务,正向代理对象为客户端(比如要访问外网,设置代理服务器为代理地址,客户端可以访问任何网站)的对象反向代理的就是服务器(不需要关心访问的是哪个服务器,反向代理放在服务器上反向代理会帮我们处理请求)proxy_pass配置语法:proxy_passURL;default:noContext:location,如果在location,limit_except其他代理的一些语法补充:proxy_buffering(buffer)语法配置:proxy_bufferingon|离开;默认值:无;上下文:http,server,location扩展:proxy_buffer_size,proxy_buffers,proxy_busy_buffers_sizeproxy_redirect(跳转重定向)配置语法:proxy_redirectdefault;proxy_redirect关闭;proxy_redirect重定向替换;默认值:无上下文:http,server,locationproxy_set_header(headerinformation)配置语法:proxy_set_headerfilevalue;默认值:proxy_set_header主机$proxy_host;proxy_set_header连接关闭;上下文:http,服务器,位置扩展:proxy_hide_header,proxy_set_bodyproxy_connect_timeout(timeout)配置语法:proxy_connect_timeouttime;默认值:无上下文:http、服务器、位置扩展:proxy_read_timeout和proxy_send_timeout配置文件中的示例:proxy_passhttp://127.0.0.1:8080;proxy_redirectdefault;proxy_set_headerHOST$http_host;proxy_set_headerX-Real-IP$remote_addr;proxy_connect_timeout30;proxy_send_timeout60;proxy_proxying_timeout_buffer2;kproxying_timeout_buff2on;proxy_buffers4128k;proxy_busy_buffers_size256k;proxy_max_temp_file_size256k;3.Nginx作为负载均衡服务负载均衡:建立在现有网络结构之上,提供一种廉价、有效、透明的方法来扩展网络设备和服务器的带宽,增加吞吐量,加强网络数据处理能力,提高网络灵活性和availability负载均衡,英文名称LoadBalance,意思是分布到多个运行单元执行,如Web服务器、FTP服务器、企业关键应用服务器等关键任务服务器等,从而完成一起任务。上游配置语法:上游名称{...}默认值:无上下文:http简单配置示例:upstreamronaldo{serverip:port[param];服务器ip:端口[参数];服务器ip:port[param];}server{location/{proxy_passhttp://ronaldo;}}param参数解释:param表示down当前服务器暂时不参与负载均衡weight=num权重,num越大被轮询的概率越大backup预留备份服务器max_fails允许请求失败的次数失败,服务暂停时间(默认10s)max_conns限制最大接收连接数调度算法:算法含义轮询按时间顺序一一分配给不同的后端服务器加权轮询权重值越大,访问概率越高分配。ip_hash是根据访问IP的hash结果分配给每个请求的,这样从同一个IP访问同一个后端服务器将是固定的。根据访问的URL的hash结果分配请求,使每个URL指向同一个后端服务器hash关键字值hash自定义keyip_hash:只需要在上游添加ip_hash;不是用户真实的ipurl_hash(1.7.2版本后可用):配置语法:hashkey[consistent];default:no上下文:upstreamkey可以是$request_uri,根据url进行hash4.Nginx作为缓存服务1.缓存的类型服务器端缓存。示例:memcache、reids代理缓存。示例:Nginx缓存服务器端数据客户端缓存。2.常用缓存配置proxy_cache_path配置语法proxy_cache_pathpath[levels=levels][use_temp_path=on|off]keys_zone=name:size[inactive=time][max_size][use_temp_path]...Default:NoneContext:httpproxy_cache配置语法:proxy_cache区域|离开;默认值:proxy_cache关闭;上下文:http,服务器,locationproxy_cache_valid(缓存有效期)配置语法:proxy_cache_valid[code...]timedefault:no上下文:http,server,locationproxy_cache_key(缓存维度)配置语法:proxy_cache_keystring;默认值:proxy_cache_key$scheme$proxy_host$request_uri;上下文:http,服务器,位置常用配置:proxy_cache_pathcache_pathlevels=1:2keys_zone=key_name:10mmax_size=10ginactive=60muse_temp_path=off;server{loaction/{proxy_passhttp://ronaldo;proxy_cache键名;proxy_cache_valid20030412h;proxy_cache_valid任意10m;proxy_cache_key$host$uri$is_args$args;add_headerNginx缓存“$upstream_cache_status”;proxy_next_upstream错误超时invalid_headerhttp_500http_502http_503http_504;}}2.清空指定缓存rm-rf缓存目录内容第三方扩展模块:ngx_cache_purge3,如何让部分页面不缓存proxy_no_cache配置语法:proxy_no_cachestring...;默认值:无上下文:http,服务器,位置简单示例if($request_uri~^/(url_3|login|register|password\/reset)){set$cookie_nocache1;}location/{proxy_no_cache$cookie_nocache;}4.大文件切片请求切片语法配置:切片大小;default:slice0;Context:http,server,位置优势:每个子请求接收到的数据会形成一个独立的文件。如果一个请求被破坏,其他请求将不会受到影响。缺点:当文件较大或分片较小时,可能会导致文件描述符耗尽等待。
