nginx 在前端中的简单应用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx 在前端中的简单应用相关的知识,希望对你有一定的参考价值。
参考技术A Web 服务实际上又称静态资源服务,自从前后端分离后,前端的输出趋向于静态资源的形式,什么是静态资源:就是我们通常用webpack构建输出的结果,比如:而为了提供文件在互联网中的可访问性,前端还是需要依赖 静态资源服务 ;最常用的做法就是Node服务和nginx服务。
Node服务最常见的,就是WebpackServer, 在前端开发联调时经常用到, 启动后我们就可以通过 http://localhost:8907/bundle.05a01f6e.js 的形式来访问构建资源;除此之外,我给大家安利另一款Node服务库: serve , 它也能快速启动一个静态资源服务。
但在生产环境,我们一般用Nginx来处理,不是Node不好,而是Nginx已经够好了。通常整个大前端会有很多前端项目,我们都将构建结果放在一台服务器上(一般有备份机器)的某个文件夹下,然后通过安装Nginx来创建一个静态资源服务供所有前端资源的访问;比如文件夹static下有A,B,C,D四个前端项目资源, 我们通过nginx配置:
我们即可通过 http://static.closertb.site/A 访问A项目,通过 http://static.closertb.site/C 访问C项目, 从而做到一鸡多吃,这种玩法在HTTPS与HTTP2的时代特别常见。
以上就是Nginx作为Web服务的简单用法,接下来我们了解一下反向代理服务
作为一个开发者,可能经常听到 代理 两字,但很多人区分不清楚正向和反向的区别:
如上图左侧所示,正向代理是用户的主动行为,如我们fq时访问goggle所做的;右侧反向代理是我们访问的服务器行为,作为用户的我们是不能控制也无需关注的。
反向代理在服务部署中,是一种非常常见的技术,比如负载均衡、容灾、缓存。
而对于前端开发来说,反向代理多用于请求转发,来处理 跨域 问题。当我们把前端静态资源服务都指向一个域名(static.closertb.site)时,与服务端请求域名(server.closertb.site)不一致,就会造成跨域。如果服务端不配合的话,那通过nginx,前端也是可以轻松做到的,在前面的配置上,我们添加:
所以当网页发出一个请求: http://static.closertb.site/a 时,实际请求地址是: http://server.closertb.site/a ,这就简单实现了一个服务代理。其原理与WebpackServer的proxy相似.
以上就是Nginx的web服务和代理服务在前端开发中的两个典型使用场景, 接下来我们说点零碎又有用的
当请求 http://static.closertb.site/site/a/logo.png )时,将会返回服务器上的/home/static/static/a/logo.png文件,即'/home/static'+'/static/a/logo.png',其 拼接的地址是匹配字符串及其以后的
而对于alias:
当请求 http://static.closertb.site/static/a/logo.png )时,将会返回服务器上的/home/static/a/logo.png文件,即'/home/static'+'/a/logo.png',其 拼接的地址是除了匹配字符串以后的地址
你可能见过A这种:
也可能见过B这种
有什么区别?
两者与root 和 alias有相似之处,只不过这种差别,只适用于:
所以当收到一个请求: http://static.closertb.site/api/user/get ) 时,配置A将会把请求代理到: http://server.closertb.site/api/user/get ); 配置B将会把请求代理到: http://server.closertb.site/user/get )
这个知识,在代理配置中真的相当重要
当我们下架一个前端服务,或者用户访问了某个根本不存在的页面,我们不希望用户看到的是404,而是将其引导到一个模糊正确的页面,这时候我可以用rewrite服务;反手一个配置,直接就将流量打到了网站首页;
另一个比较常用的,就是网站开启https,我们需要将所有http请求重定向到https:
上面同是rewrite,但还是有不一样的 ,一个是redirect(302), 另一个是permanent(301),这两个还是有很大区别的;
web 性能优化是前端的一门学问,好的静态资源加载速度,会显著提升用户体验,而nginx作为最常用的静态资源服务器,也是有诸多渠道来帮助我们来提升静态资源加载速度,简单来讲,可以三个方面,直接上配置:
``if ( )
expires 365d;
add_header Cache-Control max-age=31536000;
</pre>
expires与max-age两种配置方式都可以达到告诉浏览器资源一年以后过期的目的,更多关于http缓存的可以 看这一篇文章 ;
以上是关于nginx 在前端中的简单应用的主要内容,如果未能解决你的问题,请参考以下文章
通过PHP前端后台交互/通过ajax前端后台交互/php基础传输数据应用/简单的留言版/简单的注册账户/简单的登录页/