前后端分离 获取客户端ip_单机前后端分离部署方案初探

01d86ebdf495973c4f9f5a3f707280ed.png

背景

一台云服务器,前端项目和后端项目单独部署。好处是前后端修改发布独立,不会相互影响。前后端分离是一个大话题,这次只是记录下手动部署的初级方案。

方案

概览

前端项目包括的资源是 html,js,css。后端提供 api 接口。使用 nginx 充当前置服务,如果客户端请求前端资源,则充当静态服务器返回 html,js,css。如果客户端请求 api 接口,则转发到后端 web server。

c1aeb238a34cfbaf765089c582003d89.png

实施

后端

由于是实验性质的,所以选取 eggjs 作为后端 api 服务。按照教程写一个 api 接口 GET:/api/v1/meta/coutries 获取国家列表。(安装 eggjs 详见官网)启动服务默认绑定到端口 7001,这个时候访问 http://127.0.0.1:7001/api/v1/meta/countries 测试下接口是否通。

前端

把编译好的前端文件放到 /data/www 目录下(假设是 index.html,index.js)。安装 Nginx,修改其配置文件 /etc/nginx/nginx.conf 将默认的 root /usr/share/nginx/html; 修改为: root /data/www;

# other code ...
server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
-   root         /usr/share/nginx/html;
+   root         /data/www;
    # other code
}
# other code

启动 Nginx。假设我们云服务对外IP地址为 172.16.10.199,那么访问下 http://172.16.10.199/index.html 可以访问到网页。

前后端串联

如果我在页面上发起一个 ajax 请求 /api/v1/meta/coutries,实际上页面请求的是 http://172.16.10.199/api/v1/meta/coutries,而我们提供服务的是绑定在 7001 端口的 web 服务。那么我们就在修改下配置把 http://172.16.10.199/api/v1/meta/coutries 转发给 http://127.0.0.1:7001/api/v1/meta/countries。这里因为我们是同一台机器,所以 web 服务请求 127.0.0.1 就可以了。

# other code ...
server {
    # other code
    location /api {
        proxy_pass http://127.0.0.1:7001/api;
    }
}
# other code

这里我只是为了跑通下流程,所以没有配置 location 下其他参数。我们重启 Nginx,然后再访问下 http://172.16.10.199/index.html api 请求也正常返回了。这样我们如果前端修改就不用重新发后端的服务,后端修改也不影响前端。

扩展

这里只是一个最最初级的方案,成熟的方案包括但不限于:

  1. 自动化编译部署。
  2. CDN。
  3. 静态资源按版本号发布。
  4. 负载均衡。
  5. 微服务。
  6. 集群。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值