nginx能用来做什么
这篇“nginx能用来做什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“nginx能用来做什么”文章吧。
location的匹配规则= 表示精确匹配。只有请求的url路径与后面的字符串完全相等时,才会命中。
^~ 表示如果该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查找。
~ 表示该规则是使用正则定义的,区分大小写。
~* 表示该规则是使用正则定义的,不区分大小写。
注意的是,nginx的匹配优先顺序按照上面的顺序进行优先匹配,而且注意的是一旦某一个匹配命中直接退出,不再进行往下的匹配
剩下的普通匹配会按照最长匹配长度优先级来匹配,就是谁匹配的越多就用谁。
server{server_namewebsite.com;location/document{return701;}location~*^/docume.*${return702;}location~*^/document${return703;}}curl-Iwebsite.com:8080/document702#匹配702因为正则的优先级更高,而且正则是一旦匹配到就直接退出所以不会再匹配703
server{server_namewebsite.com;location~*^/docume.*${return701;}location^~/doc{return702;}location~*^/document${return703;}}curlhttp://website.com/documentHTTP/1.1702#匹配702因为^~精确匹配的优先级比正则高也是匹配到之后支持退出
server{server_namewebsite.com;location/doc{return702;}location/docu{return701;}}#701前缀匹配匹配是按照最长匹配,跟顺序无关history模式、跨域、缓存、反向代理
#html设置history模式location/{indexindex.htmlindex.htm;proxy_set_headerHost$host;#history模式最重要就是这里try_files$uri$uri//index.html;#index.html文件不可以设置强缓存设置协商缓存即可add_headerCache-Control'no-cache,must-revalidate,proxy-revalidate,max-age=0';}#接口反向代理location^~/api/{#跨域处理设置头部域名add_headerAccess-Control-Allow-Origin*;#跨域处理设置头部方法add_headerAccess-Control-Allow-Methods'GET,POST,DELETE,OPTIONS,HEAD';#改写路径rewrite^/api/(.*)$/$1break;#反向代理proxy_passhttp://static_env;proxy_set_headerHost$http_host;}location~*\.(?:css(\.map)?|js(\.map)?|gif|svg|jfif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)${#静态资源设置七天强缓存expires7d;access_logoff;}以目录去区分多个history单文件
因为不可能每一个项目开启一个域名,仅仅指向通过增加路径来划分多个网站,比如:
www.taobao.com/tmall/login访问天猫的登录页面
www.taobao.com/alipay/login访问支付宝的登录页面
server{listen80;server_nametaobao.com;indexindex.htmlindex.htm;#通过正则来匹配捕获[tmall|alipay]中间的这个路径location~^/([^\/]+)/(.*)${try_files$uri$uri//$1/dist/index.html=404;}}负载均衡
基于upstream做负载均衡,中间会涉及一些相关的策略比如ip_hash、weight
upstreambackserver{#哈希算法,自动定位到该服务器保证唯一ip定位到同一部机器用于解决session登录态的问题ip_hash;server127.0.0.1:9090down;(down表示单前的server暂时不参与负载)server127.0.0.1:8080weight=2;(weight默认为1.weight越大,负载的权重就越大)server127.0.0.1:6060;server127.0.0.1:7070backup;(其它所有的非backup机器down或者忙的时候,请求backup机器)}灰度部署
如何根据headers头部来进行灰度,下面的例子是用cookie来设置
如何获取头部值在nginx中可以通过$http_xxx来获取变量
upstreamstable{serverxxxmax_fails=1fail_timeout=60;serverxxxmax_fails=1fail_timeout=60;}upstreamcanara{serverxxxmax_fails=1fail_timeout=60;}server{listen80;server_namexxx;#设置默认set$group"stable";#根据cookie头部设置接入的服务if($http_cookie~*"tts_version_id=canara"){set$groupcanara;}if($http_cookie~*"tts_version_id=stable"){set$groupstable;}location/{proxy_passhttp://$group;proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;indexindex.htmlindex.htm;}}优雅降级
常用于ssr的node服务挂了返回500错误码然后降级到csr的cos桶或者nginx中
优雅降级主要用error_page参数来进行降级指向备用地址。
upstreamssr{serverxxxmax_fails=1fail_timeout=60;serverxxxmax_fails=1fail_timeout=60;}upstreamcsr{serverxxxmax_fails=1fail_timeout=60;serverxxxmax_fails=1fail_timeout=60;}location^~/ssr/{proxy_passhttp://ssr;#开启自定义错误捕获如果这里不设置为on的话会走向nginx处理的默认错误页面proxy_intercept_errorson;#捕获500系列错误如果500错误的话降级为下面的csr渲染error_page500501502503504=@csr_location#error_page500501502503504=200@csr_location#注意这上面的区别等号前面没有200表示最终返回的状态码已@csr_location为准加了200的话表示不管@csr_location返回啥都返回200状态码}location@csr_location{#这时候地址还是带着/ssr/的要去除rewrite^/ssr/(.*)$/$1break;proxy_passhttp://csr;rewrite_logon;}webp根据浏览器自动降级为png
这套方案不像常见的由nginx把png转为webp的方案,而是先经由图床系统(node服务)上传两份图片:
一份是原图png
一份是png压缩为webp的图片(使用的是imagemin-webp)
然后通过nginx检测头部是否支持webp来返回webp图片,不支持的话就返回原图即可。这其中还做了错误拦截,如果cos桶丢失webp图片及时浏览器支持webp也要降级为png
http{include/etc/nginx/mime.types;default_typeapplication/octet-stream;#设置日志格式log_formatmain'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for"''"$proxy_host""$upstream_addr"';access_log/var/log/nginx/access.logmain;sendfileon;keepalive_timeout65;#开启gzipgzipon;gzip_varyon;gzip_proxiedany;gzip_comp_level6;gzip_typestext/plaintext/csstext/xmlapplication/jsonapplication/javascriptapplication/rss+xmlapplication/atom+xmlimage/svg+xml;#负载均衡这里可以是多个cos桶地址即可upstreamstatic_env{serverxxx;serverxxx;}#map设置变量映射第一个变量指的是要通过映射的key值Accpet第二个值的是变量别名map$http_accept$webp_suffix{#默认为空字符串default"";#正则匹配如果Accep含有webp字段设置为.webp值"~*webp"".webp";}server{listen8888;absolute_redirectoff;#取消绝对路径的重定向#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。root/usr/share/nginx/html;location/{indexindex.htmlindex.htm;proxy_set_headerHost$host;try_files$uri$uri//index.html;add_headerCache-Control'no-cache,max-age=0';}#favicon.icolocation=/favicon.ico{log_not_foundoff;access_logoff;}#robots.txtlocation=/robots.txt{log_not_foundoff;access_logoff;}#location~*\.(png|jpe?g)${#PassWebPsupportheadertobackend#如果header头部中支持webpif($webp_suffix~*webp){#先尝试找是否有webp格式图片rewrite^/(.*)\.(png|jpe?g)$/$1.webpbreak;#找不到的话这里捕获404错误返回原始错误注意这里的=号代表最终返回的是@static_img的状态吗error_page404=@static_img;}proxy_intercept_errorson;add_headerVaryAccept;proxy_passhttp://static_env;proxy_set_headerHost$http_host;expires7d;access_logoff;}location@static_img{#set$complete$schema$server_addr$request_uri;rewrite^/.+$$request_uribreak;proxy_passhttp://static_env;proxy_set_headerHost$http_host;expires7d;}#assets,medialocation~*\.(?:css(\.map)?|js(\.map)?|gif|svg|jfif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)${proxy_passhttp://static_env;proxy_set_headerHost$http_host;expires7d;access_logoff;}error_page500502503504/50x.html;location=/50x.html{root/usr/share/nginx/html;}}}为什么要用nginx,nginx有什么特点?
nginx的特点:
核心特点:高并发请求的同时保持高效的服务
热部署
低内存消耗
处理响应请求很快
具有很高的可靠性
同时,nginx也可以实现高效的反向代理、负载均衡。
前端可以用nginx做些什么?
搭建静态资源服务器
反向代理分发后端服务(可以和nodejs搭配实现前后端分离)和跨域问题
根据User Agent来重定向站点
开发环境或测试环境切换(切换host)
url重写,使用rewrie规则本地映射
资源内容篡改
获取cookie做分流
资源合并
gzip压缩
压缩图片
sourceMap调试
以上就是关于“nginx能用来做什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。