nginx的重要性及配置应用
一、为什么要前后端分离
在现在的程序开发中,越来越多的出现了前后端分离的趋势。在前后端分离的情况下,后端只需要关注于业务逻辑以及后台代码实现,对外只需提供api接口以及相应的接口文档即可。而前端则是在关注于自己的页面展现以及根据后端提供的接口文档调用api接口进行,在页面铺相应的数据即可。
- 后台:首先就是后端的程序开发人员没有必要再去关注于前端页面的铺数据,这样由于不用再去处理前台页面中的各种自己所不擅长的dom节点,各种js与css,这样就加快了后端开发人员的开发进度,极大地减轻了后端开发人员的开发负担。
- 前端:对于前端的开发人员而言,其开发进度由于摆脱了后台的限制,没有必要等到后台实现相应的功能后再开展前台页面的搭建,这样前后端的程序开发人员可以实现同时开发,这样也就加快了前端开发人员的开发进度。而前台开发人员再也不用去处理jsp页面中的各种内嵌的java脚本和EL表达式等自己动都不敢动的代码,这样对于前端而言反倒是轻松了不少。同时在后端代码没有实现功能的前提下,前端可以根据需求铺虚拟数据,等到后台实现相应的接口后,直接替换掉即可。
再次,在前后端分离的前提下,由于页面的展现与后端的逻辑松耦合,这使得项目的改动变得更加的灵活,后端框架的改动不至于使前端受到影响,同时前端框架的改动,而后端也不至于出现较大的改动。由于前后端的分离,使得前端开发人员与后端开发人员各自只用关注自己的那一块代码即可,这样就提升了分工,提高了代码编写质量与编写效率。
二、nginx的配置
下载地址:https://pan.baidu.com/s/1Ba9di7sG5XaQ9pMkPpTJ3Q
提取码:vbdz
需要配置的文件conf下面的nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;#监听端口号(这里不多说)
server_name 本地IP;(location 本地IP地址)
location /**/ {#这里是监听输入地址开启代理 例:router
set $ref $http_referer;
set $ua $http_user_agent;
proxy_set_header host $host;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header Refrerer $ref;
proxy_set_header User-Agent $ua;
proxy_pass 服务器地址;例:http://gw.api.taobao.com/router/
}
location /static/ {#静态文件存放地址
root E:/home/mallAdmin/;
}
location / {
set $ref $http_referer;
set $ua $http_user_agent;
proxy_set_header host $host;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header Refrerer $ref;
proxy_set_header User-Agent $ua;
proxy_pass 本地地址;例192.168.0.10:8848
}
}
}
上述配置文件的信息是这样的,默认的Nginx监听的端口号为80,其服务名为localhost,拦截路径为“/”,也就是说项目的根路径,因为我这里是用HBuilderX写的,为了方便其他项目访问,我这里没有设置默认页。假设我工程目录里面有一个test项目,里面有main.html,访问就是http://localhost/test/main.html
启动nginx(双击nginx.exe)
你会发现访问的请求都变了,设置的http://gw.api.taobao.com/router/经过转发之后成了
http://127.0.0.1/router/rest
通过这样我们就可以顺利的访问跨域请求。一步到位。
如果有刚开始接触前端的童鞋这篇文章可以解决你绝大部分的跨域问题,新入职后端(java)呢,emmmm你可以把这篇文章推荐给你前端童鞋看,不用每个接口都开跨域了哦。@CrossOrigin这么麻烦,拦截器又不会写,难搞哦~
三、其他应用
nginx虽然做的最多的是反向代理但他可不止这点功能
如:负载均衡:nginx会自动判断服务器状态,两台服务器一台挂了但还可以使用。
权重,如果后台服务器性能不均,可以指定访问服务器次数,如下配置,10次中有9次访问的8080,一次访问8081
upstream test {
server localhost:8080 weight=9;
server localhost:8081 weight=1;
}
ip_hash ,存储用户登陆信息之前都是用session,如果我们在这台服务器存储了session那么下次请求到了另一台服务器就需要重新登陆,用户体验贼差,这就用到了ip_hash,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
fair(第三方) 根据相应时间分配服务器,相应短优先分配
upstream backend {
fair;
server localhost:8080;
server localhost:8081;
}
url_hash(第三方) ,按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。
除负载均衡还可以做为HTTP静态资源服务器,如果是静态网页的话可以通过这种方式来部署。静态部署上面有提到。想深入了解的童鞋可自行百度。
正向代理:客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口,吆,好大一堵墙…