Nginx之前后端分离(入门)
几个月前,公司架构优化,首先就是前后端分离。
所谓前后端分离,就是在传统的前后端代码都在一个项目里的基础上,将前后端代码抽离,把前端代码从后端项目了分离出来,前后端开发人员各自在自己的项目里开发。
为什么要前后端分离?
随着项目越做越大,功能模块越来越多,代码量越来越多,前后端代码都糅杂在一个项目里,前后端开发人员几十个,代码提交次数多而杂,项目变得很臃肿,代码维护人员的工作变得难做,此时亟待解决此问题,把前后端代码分离成两个项目,前后端开发人员各自维护自己的项目,使项目轻量化,便于维护。
前后端分离后带来的问题有哪些呢?
1、跨域。前后端分离后,势必各自部署,那么前后端就会存在跨域的问题。
2、前端项目部署方式。前后端各自部署,后端好说,继续用原来的方式部署就行了,前端怎么部署?
3、前后端怎么联调?
带着这3个问题,自然而然的就想到使用nginx做反向代理。
nginx [engine x]是一个HTTP和反向代理服务器,一个邮件代理服务器和一个通用的TCP / UDP代理服务器
我们线上用的是 Nginx ,分离后我们本地开发时有很多同事,还是使用原来的老方式, 把前端代码复制到项目里跑,这样太笨重。所以我就自己研究了一下 nginx ,配置好打好包分享给其他同事,在公司同事间推广。
nginx做前后端分离具体怎么使用的呢?下面来说一下。
首先我们在Windows上搞好,下载nginx,官网[http://nginx.org/](http://nginx.org/),
打开后可以看到目前最新版本是1.17.2
找一个版本下载后放到自己喜欢的目录解压就行了。
然后打开解压后的目录,找到conf目录进去找到nginx.conf文件,文本方式打开。
这个就是nginx的配置文件,我们需要修改这个文件,以适用于我们的需要。
这里只截取了配置文件的一部分,这部分是关键。
解释一下,在http模块里,有两个子模块,upstream 和 server 。
upstream 模块配置的是服务端的(集群)地址,eroly_server 是 upstream 的名称,server 是服务器地址,后跟服务的ip:port,可以写多个,也就是服务器集群地址。
server 模块相当于使用Nginx做静态服务器,配置静态资源的一些信息,使其能够被外部访问。listen 是监听的端口,server_name 是服务器ip,location 模块主要配置资源的地址 location 后面跟的是一个正则表达式表示符合此正则的请求被路由到该模块配置的资源地址。可以配置多个。其中,location 模块中的 root 这里我配置的静态资源的地址,当请求包含 /eroly/(我的项目根地址)时其实访问的是我本地 D盘下的 eroly_static 目录下的对应的文件。例如访问http://localhost/eroly/login/index.html时,其实 nginx 会根据配置信息 从上到下去匹配你配置的 location ,此时将会匹配到 location /eroly/ 这个,那么其实真正访问的是 D:/eroly_static/eroly/login/index.html。
root 下面一行被注释掉的是什么意思?rewrite 表示重定向,假如此时我的D盘eroly_static目录下没有 eroly 这一层,就直接是 D:/eroly_static/login/index.html 少一层目录(可能前端项目没有这个目录,所以从版本管理工具上下载下来就没有。但是后端服务根目录是这个,前端访问的时候需要加上,如果手动添加的话,很麻烦又不能提交,所以用这个指令就很好的解决了这个尴尬的问题),我们就可以用这个指令配合 root 使用。
至于下面这个location 配置的就是服务端的了,假如服务端接口都是 /eroly/api/开头的,那么前端访问后端接口时,就会走这个location ,关键的是 proxy_pass 这个属性,你看后面跟的是 http://eroly_server/ 就是 upstream 的名字。其他字段的含义这里不多说了,可以自行了解。
http {
upstream eroly_server{
server localhost:8080;
}
server {
listen 8091;
server_name localhost; #static
location /eroly/ {
root D:/eroly_static;
#rewrite ^/eroly/(.*?)$ /$1 break;
}
#server
location /eroly/api {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://eroly_server/;
proxy_redirect off;
}
}
}
这里只是简单的介绍下 Nginx 用于前后端分离,作为前端部署服务器的简单用法,实际 Nginx 的应用非常强大。
Nginx之前后端分离(入门)的更多相关文章
- 谈谈渲染,玩玩nginx——前后端分离,转发请求到Tomcat的尝试
一.谈谈"渲染" 相信好多人都挺听过"渲染"这个词,但不清楚它是什么意思?前端开发以为这是后端的活儿,后端开发以为是前端的事儿,推着推着就不了了之.其实渲染很简 ...
- nginx 前后端分离 代理转发,解决跨域问题
场景 适用于公司有前端,项目采用前后端分离.类似于我们 后端 springboot 提供接口,前端专门写html调用相应的接口,解决跨域问题 配置说明 worker_processes 1; even ...
- SpringBoot 和Vue前后端分离入门教程(附源码)
作者:梁小生0101 juejin.im/post/5c622fb5e51d457f9f2c2381 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计 ...
- Nginx 前后端分离配置 分发
前端项目VUE 端口8081 , 后端项目JAVA 端口8080 # For more information on configuration, see: # * Official English ...
- web 部署专题(九):Nginx 前后端分离中csrf_token 认证的实现
1. 思路 参考:https://stackoverflow.com/questions/20826201/simple-csrf-protection-using-nginx-alone?r=Sea ...
- springboot+vue脚手架使用nginx前后端分离
1.vue配置 /** * * 相对于该配置的nginx服务器请参考nginx配置文件 * */ module.exports = { // 基本路径 publicPath: '/', // 输出文件 ...
- nginx前后端分离路由配置
参考链接: https://blog.csdn.net/qq_30021219/article/details/80901199
- 一个Java程序猿眼中的前后端分离以及Vue.js入门
松哥的书里边,其实有涉及到 Vue,但是并没有详细说过,原因很简单,Vue 的资料都是中文的,把 Vue.js 官网的资料从头到尾浏览一遍该懂的基本就懂了,个人感觉这个是最好的 Vue.js 学习资料 ...
- 使用 Nginx 部署前后端分离项目,解决跨域问题
前后端分离这个问题其实松哥和大家聊过很多了,上周松哥把自己的两个开源项目部署在服务器上以帮助大家可以快速在线预览(喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了 ...
随机推荐
- Linux第二章-Linux常用命令
一.Linux常用快捷键 快捷键 作用 Tab 补全文件名或者路径 Ctrl + L 清除屏幕,然后,在最上面重新显示目前光标所在的这一行的内容. Ctrl + C 终止当前进程 Ctrl + D 注 ...
- Spring Cloud Alibaba 实战(十三) - Sleuth调用链监控
本文概要:大白话剖析调用链监控原理,然后学习Sleuth,Zipkin,然后将Sleuth整合Zipkin,最后学习Zipkin数据持久化(Elasticsearch)以及Zipkin依赖关系图 实战 ...
- IT兄弟连 HTML5教程 CSS3揭秘 CSS3概述
对于Web开发者来说,CSS3不只是一门新奇的技术,更重要的是这些全新概念的Web应用给开发人员带来了无限的可能性,也极大地提高了开发效率.我们不必再依赖图片或者JavaScript去完成圆角.多背景 ...
- IT兄弟连 HTML5教程 多媒体应用 小结及习题
小结 在互联网上,图像和链接则是通过URL唯一确定信息资源的位置.URL分为绝对URL和相对URL.通过使用<img />标记在浏览器中显示一张图像.超文本具有的链接能力,可层层链接相关文 ...
- CBrother脚本10分钟写一个拯救“小霸王服务器”的程序
CBrother脚本语言10分钟写一个拯救“小霸王服务器”的程序 到了一家新公司,接手了一坨c++服务器代码,到处内存泄漏,这服务器没有数据库,挂了后重启一下就好了,公司就这么凑活着用了几年了,定时重 ...
- springboot hikari 连接池 在启动时未初始化数据库连接问题
在启动Springboot 项目时 2019-11-18 21:32:38.223 INFO 1080 --- [on(4)-127.0.0.1] o.s.web.servlet.Dispatcher ...
- 多线程十 Timer
定时/计算在java中主要使用的是Timer对象,他的内部依然是采用多线程方式进行处理 它有四个构造方法 方法名 作用 Timer() 空参 Timer(String name) 指定名字 Timer ...
- Web前端基础(10):JavaScript(四)
1. 伪数组arguments arguments代表的是实参.有个讲究的地方是:arguments只在函数中使用. 1.1 返回参数个数 返回函数实参的个数:arguments.length 例子: ...
- sync.Map与Concurrent Map
1. sync.Map 1.1. map并发不安全 go1.6以后map有了并发的安全检查,所以如果在并发环境中读写map就会报错 func unsafeMap() { // 创建一个map对象 m ...
- none 和 host 网络的适用场景
我们会首先学习 Docker 提供的几种原生网络,以及如何创建自定义网络.然后探讨容器之间如何通信,以及容器与外界如何交互. Docker 网络从覆盖范围可分为单个 host 上的容器网络和跨多个 h ...