当前位置: 首页 > Linux

Nginx入门实战(二)场景实现

时间:2023-04-07 01:37:43 Linux

在上一章中,我了解了nginx的基本理论和配置。本章将介绍nginx在各种场景下的不同使用方式。一、静态资源WEB服务1、静态资源的类型是非服务器动态运行产生的文件,换句话说,就是可以直接在服务器上找到对应的文件请求。浏览器端渲染:HTML、CSS、JS图片:JPEG、GIF、PNG视频:FLV、MPEG文件:TXT,下载任意文件2、静态资源服务场景——CDN什么是CDN?比如北京的一个用户要请求一个文件,文件放在新疆的资源存储中心。如果直接去新疆要求太远,耽误的时间会很长。使用nginx静态资源回源分发到北京资源存储中心,让用户动态定位请求到北京资源存储中心,最大限度减少传输延迟2.nginx静态资源配置配置域:http,server,location#高速读取文件http{sendfileon;}#开启sendfile时,开启tcp_nopush提高网络包传输效率#tcp_nopush一次性给客户端传输文件,就好像你有十个包裹,快递员送一次一个,来回十次,打开后,快递员会等着你把十个包裹都发完,一起发给你http{sendfileon;tcp_nopushon;}#tcp_nodelay开启实时传输,传输方式与tcp_nopush相反,追求实时,但只在长连接下生效http{sendfileon;tcp_nopush上;tcp_nodelayon;}#压缩传输访问的文件(减少文件资源大小,提高传输速度)#打开gzip_http_version1.1;#服务器传输版本gzip_comp_level2;#压缩率,压缩率越高,压缩越多,压缩率越高可能会消耗服务器性能gzip_typestext/plainapplication/javascriptapplication/x-javascripttext/javascripttext/cssapplication/xmlapplicationon/xml+rss图片/jpeg图片/gif图片/png;#压缩文件类型root/opt/app/code;#对应目录(到该目录下找到对应文件)}#直接访问压缩文件#当访问路径以下载开始时,如www.baidu.com/download/test.img#进入/opt/app/code目录中找到test.img.gz文件。回到前端,已经可以浏览img文件位置了~load^/download{gzip_staticon#Open;tcp_nopush上;root/opt/app/code;}2.浏览器缓存HTTP协议定义的缓存机制(如:Expires;Cache-control等),减少服务器消耗和延迟1.浏览器不缓存浏览器请求->无缓存->请求WEB服务器->请求响应->渲染渲染阶段会根据缓存设置在浏览器中生成缓存2.浏览器有缓存浏览器请求->有缓存->检查本地是否有缓存缓存时间已过期->如果未过期->如果过期,重新请求WEB服务器3.语法配置位置~.*\.(html|htm)${expires12h;请求文件时,header信息会携带etag和last_modified_since两个tag值。下次浏览器发起请求时,header信息会发送这两个标签,服务器会检查文件是否有变化。如果没有,header信息会直接返回etag和last_modified_since,状态码为304,浏览器知道内容没有变化,所以直接调用本地缓存,这个过程也是请求服务,但是传输的内容是很小。3.跨站访问开发nginx跨站访问设置位置~.*\.(html|htm)${add_headerAccess-Control-Allow-Origin*;add_header访问控制允许方法GET、POST、PUT、DELETE、OPTIONS;#Access-Control-Allow-Credentialstrue#Allowcookiestocross-domain}当响应中指定Access-Control-Allow-Credentials为true时,Access-Control-Allow-Origin不能指定为*,需要指定具体的域名。相关跨域内容可参考Laravel跨域功能中间件使用代码实现跨域,原理同nginx跨域配置4.防盗链,防止服务器中的静态资源被盗用其他网站文章介绍首先,你需要了解一个nginx变量$http_referer#表示上次页面访问的当前请求地址,也就是说,访问www.baidu.com首页,这是第一次访问,所以$http_referer为空,但是访问这个页面的时候还需要获取首页图片,请求这张图片的时候$http_referer是www.baidu.com然后配置location~.*\.(jpg|gif)${#valid_referers表示我们允许哪些$http_referer访问#none表示没有$http_referer,如果第一次访问$http_referer为空#blocked表示$http_referer不是标准地址,异常域名等#只允许这个ipvalid_referersnoneblocked127.xxx.xxx.xxif($invalid_referer){#如果不满足变量值为1return403;}}五、HTTP代理服务Nginx可以实现多种代理方式HTTPICMPPOPIMAHTTPSRTMP1。反向代理代理的对象是服务器2.反向代理语法:proxy_passURL默认:——位置:loaction#proxyport#场景:服务器80端口开放,对外关闭8080端口,客户端需要访问8080#在nginx中配置proxy_pass代理转发时,如果在proxy_pass后的url中加上/,表示绝对根路径;如果没有/,则表示是相对路径,匹配的路径部分也交给代理管理服务器{听80;位置/{proxy_passhttp://127.0.0.1:8080/;proxy_redirect默认;proxy_set_header主机$http_host;proxy_set_headerX-Real-IP$remote_addr;#获取客户端真实IPproxy_connect_timeout30;#超时时间proxy_send_timeout60;proxy_read_timeout60;proxy_buffer_size32k;proxy_buffering开启;#开启缓冲区,减少磁盘ioproxy_buffers4128k;proxy_busy_buffers_size256k;proxy_max_temp_file_size256k;