实现前后端分离,可以让前后端独立开发、独立部署、独立单测,双方通过JSON进行数据交互。
对于前端开发人员来说,不用每次调试都需要启动或配置Java/Tomcat运行环境;对于后端开发人员来说 ,也不用在需要往JSP页面注入数据。
通过nginx来部署前端代码,可以帮助前端实现以下基本需求:
1、请求转发,解决请求跨域的问题
server {
listen 7777;
location /{
root /Users/xiaoyun/git/someproject/dist;
}
location /api/v1{
proxy_set_header Host api.yourhost.com;
proxy_pass http://api.yourhost.com/api/v1/;
}
location /api/v2{
proxy_pass http://api.yourhost.com/new;
}
}
以上是一段nginx配置参考:
listen nginx服务端口号
location / 设置默认根目录所访问的本地代码路径,这里还可以设置默认主页index
proxy_pass 请求转发,可以配置多个,从上至下进行匹配
以第一个配置为例,即所有本地以/api/v1开头的请求都会转发至对应线上服务器,例如: http://localhost:7777/api/v1/getConfig 则会自动转发到:http://api.yourhost.com/api/v1/getConfig
另外,还需要注意的是,proxy_pass配置的路径如果是以/结尾,如上面的配置v1,那么此时路径为相对路径,否则为绝对路径
例如 v2的转发配置:如果请求 http://localhost:7777/api/v2/user/list 则会转发自 http://api.yourhost.com/new/user/list ,不会带有原路径的 /api/v2
2、gzip请求压缩
网站开启gzip压缩,不仅能够节省带宽,也能够快速响应用户的访问
http{
gzip on;
gzip_proxied any;
gzip_min_length 1024;
gzip_buffers 4 8k;
gzip_comp_level 3;
gzip_types text/plain text/css application/x-javascript application/javascript application/xml application/json;
}
以下为各项配置作用:
gzip on; (启用 gzip 压缩功能)
gzip_proxied any; (nginx 做前端代理时启用该选项,表示无论后端服务器的headers头返回什么信息,都无条件启用压缩)
gzip_min_length 1024; (最小压缩的页面,如果页面过于小,可能会越压越大,这里规定大于1K的页面才启用压缩)
gzip_buffers 4 8k; (设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流)
gzip_comp_level 3; (压缩级别,1压缩比最小处理速度最快,9压缩比最大但处理最慢,同时也最消耗CPU,一般设置为3就可以了)
gzip_types text/plain text/css application/x-javascript application/javascript application/xml application/json; (什么类型的页面或文档启用压缩)
第二部分
Nginx配置两个地方就行:
先是配置好自己项目的服务,确保自己的项目能运行:
location / {
root /web/xiangmu/public; // 本地项目的路径
index index.html index.php;
}
再是配置接口请求后端:
location /api/ {
proxy_pass http:// 192.168.1.1;(后端接口地址,端口号也要注意哦,不是80的记得加上端口号)
proxy_set_header: Host $host;
}
注意点(后端接口配置):
#### 如果你的配置出现404了,这个时候你可以对照检查下面的问题是不是你遇到的。
1、proxy_pass 地址后面要不要加/取决于匹配的 /api/ 作不作为你uri的一部分,如果 /api/ 是其中一部分,则不需要带上 / ; 反之带上。加了 / 相当于是绝对根路径,nginx 不会把location 中匹配的路径 /api/ 带上。
如果你的配置跟上面一样,同时请求a.html页面:
请求地址应该要是这样的: http:// 192.168.1.1/api/a.html;
如果配置是这样:proxy_pass http:// 192.168.1.1/;(后端接口地址),请求接口地址应该是这样: http:// 192.168.1.1/a.html。
2、proxy_pass的地址记得在hosts文件做ip映射,建议直接使用域名对应的ip地址。
3、location 中 ~ (区分大小写)与 ~* (不区分大小写)标识均为正则匹配。如果你不确定,请在location后面加上 location ~* /api/ { }这样的配置 不区分 api三个字母的大小写。