部署前后端分离式nginx配置的完整步骤
前⾔
⽼⽣常谈了,这⾥谈谈我的理解的前后端分离,简单的分离⽆⾮是将原来mvc的view层剥离出来,独⽴⼀个成为Servlet服务,Servlet之间依靠http连通。这⾥的view Servlet容器可以是任意⼀种服务端服务,Tomcat、Apache、Nginx、IIS,都可以。这⾥以常⽤的Nginx为例⼦做简单的介绍。
需求分析
先来⼀波需求分析。
单项⽬
单项⽬指的是⼀台服务器部署⼀个前端服务,使 => index.html的单⼀指向。
多项⽬
多项⽬指的是⼀台服务器部署多个前端服务,使/a => a./b => b.html等多指向。
请求代理。
cookie domain重写。
cookie path 重写。
提⽰:这⾥做好写conf.d/*.conf,这样配置可以分离处理。
公共配置
server{
listen 80; # 配置端⼝
server_name _; # 配置域名
charset utf-8; # 编码
access_log /xxx/log/nginx_access.log main; # 成功⽇志
error_log /xxx/log/nginx_error.log error; # 错误⽇志
index index.html; # 查⽂件顺序
set $root /xxx/nginx/; # 变量设置,设置公共路径
# 其余location
}
请⼿动去/xxx/log/nginx_access.log和/xxx/log/nginx_error.log下新建对应⽂件。可能会执⾏nginx reload第⼀次执⾏时会报错。
set的$root路径为绝对路径,access_log和error_log同样都是绝对路径。
单项⽬配置
⽬录结构
nginx
|----- index.html
|----- user.html
location配置
location / {
root $root;
}
好了最简单的基于根路径配置就这样好了,这⾥⽆⾮是通过location配置⼀条路径,然后指向到$root⽂件夹下的index.html这个⽂件下。
多项⽬配置
⽬录结构
nginx
|----- a
|----- index.html
|----- b
|----- index.html
多条location配置
location ^~ /a {
alias $root/a;
}
location ^~ /b {
alias $root/b;
}
location / {
root $root;nginx和apache区别
}
跟单项⽬唯⼀的不同点在于,root和alias的区别,root指的是⽂件的绝对匹配路径,⽽alias则是相对匹配。root可以再http、server、location中配置,⽽alias只能在location中配置。这我还加⼊的正则^~,当匹配/a或者/b时,不管location的路径是什么,资源的真实路径⼀定是都是 alias 指定的路径。这样的我就能让/a、/b拥有匹配的到路径之后,拥有跳转固定路径,这在spa式的前端项⽬⾮常有⽤的,因为其实核⼼⽂件只有⼀个index.html⽂件(资源⽂件另说)。这样我永远跳转index.html就能保证浏览器⼿动刷新的时候,不会根据root路径去查服务器其他路径的资源。然后设置spa的根路径和 /b必须是匹配的。
为什么会有这种需求?前端是轻便的,我们为了达到节约服务器与聚合同类型业务的时候,就会使⽤到这种机制。就像希望/a => 运营管理台、/b => erp管理台⼀样。所有admin这个域名下我们只要切出⼦路径即可。简单轻便。
请求转发
location ^~ /api {
proxy_pass /;
}
修改cookie domain
有时候处于安全考虑,我们会设置⼀定的cookie的domain属性这是对于nginx转发来说就很不友好了。当然也是有解决⼿段的,也很简单。
location {
proxy_cookie_domain <;本域的domain> <;想修改的domain>;
}
修改cookie path
当我们转发回api接⼝时,有时候api域名拿不到cookie,除了domain还有cookie path的可能性。当然解决⽅案也很简单
location {
proxy_cookie_path <;本域的路径> <;想修改的路径>;
}
后续优化
这只是nginx配置最简单的⼀个例⼦,还有,开启gzip、缓存设置、合并资源请求的插件、设置50x,40x页⾯、判断移动
端,pc端跳转等配置,nginx还是很强⼤的。
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,谢谢⼤家对的⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。