部署前后端分离式nginx配置的完整步骤

前言

老生常谈了,这里谈谈我的理解的前后端分离,简单的分离无非是将原来mvc的view层剥离出来,独立一个成为Servlet服务,Servlet之间依靠http连通。这里的view Servlet容器可以是任意一种服务端服务,Tomcat、Apache、Nginx、IIS,都可以。这里以常用的Nginx为例子做简单的介绍。

需求分析

先来一波需求分析。

  • 单项目

    • 单项目指的是一台服务器部署一个前端服务,使www.xxx.com => index.html的单一指向。
  • 多项目
    • 多项目指的是一台服务器部署多个前端服务,使www.xxx.com/a => a.html,www.xxx.com/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;
}

跟单项目唯一的不同点在于,root和alias的区别,root指的是文件的绝对匹配路径,而alias则是相对匹配。root可以再http、server、location中配置,而alias只能在location中配置。这我还加入的正则^~,当匹配/a或者/b时,不管location的路径是什么,资源的真实路径一定是都是 alias 指定的路径。这样的我就能让/a、/b拥有匹配的到路径之后,拥有跳转固定路径,这在spa式的前端项目非常有用的,因为其实核心文件只有一个index.html文件(资源文件另说)。这样我永远跳转index.html就能保证浏览器手动刷新的时候,不会根据root路径去查找服务器其他路径的资源。然后设置spa的根路径和 /b必须是匹配的。

为什么会有这种需求?前端是轻便的,我们为了达到节约服务器与聚合同类型业务的时候,就会使用到这种机制。就像希望admin.xxxx.com/a => 运营管理台、admin.xxxx.com/b => erp管理台一样。所有admin这个域名下我们只要切出子路径即可。简单轻便。

请求转发

location ^~ /api {
  proxy_pass http://api.xxx.com/;
}

这里就特别简单了,我通过正则匹配/api这个请求,通过proxy_pass属性,将请求定向到http://api.xxx.com。即可

修改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还是很强大的。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • 基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践

    淘宝网线上应用的传统软件栈结构为 Nginx + Velocity + Java,即: 在这个体系中,Nginx 将请求转发给 Java 应用,后者处理完事务,再将数据用 Velocity 模板渲染成最终的页面. 引入 Node.js 之后,我们势必要面临以下几个问题: 技术栈的拓扑结构该如何设计,部署方式该如何选择,才算是科学合理?项目完成后,该如何切分流量,对运维来说才算是方便快捷?遇到线上的问题,如何最快地解除险情,避免更大的损失?如何确保应用的健康情况,在负载均衡调度的层面加以管理?承系

  • 详解基于Vue,Nginx的前后端不分离部署教程

    有小伙伴私信问我vue项目是如何进行前后端不分离打包发布的,那我岂能坐视不管,如此宠粉的我肯定是要给发一篇教程的,话不多说,开始操作 前端假如我们要发布我们的Vue项目,假设我们前端用的是history路由(要发就发个全套的),并且在后端带有一个二级目录,以便于可以在服务器上部署N个项目,在这里后台服务器的话,我用Nginx服务器来给大家模拟,接下来就面对疾风吧: 一.在这里我前端vue项目使用vue cli脚手架进行搭建的,后台使用Nginx,首先是前端配置: 1.前端配置,在这里假如后端访问

  • Nginx实现前后端分离

    #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;

  • nginx+vue.js实现前后端分离的示例代码

    1.nginx 是一个高性能的HTTP和反向代理服务器,常用于分布式服务器管理. 它常用于做负载均衡(通过调用多台服务器达到此目的) 静态资源输出更快,可以对资源实现gzip压缩后输出(这也是本文为什么用它做静态资源访问的一个重要原因) 适合解决跨域问题和反向代理(因为谁也不想看到在本域名下看到访问其他域名的情况发生,跨域可导致csrf攻击,这是本文用它的第二个原因) 占用内存少,秒启,能快速切换结点,防止宕机 2.es6 是ECMAScript的第六个版本,如果想要学好vue.js等js框架,

  • 部署前后端分离式nginx配置的完整步骤

    前言 老生常谈了,这里谈谈我的理解的前后端分离,简单的分离无非是将原来mvc的view层剥离出来,独立一个成为Servlet服务,Servlet之间依靠http连通.这里的view Servlet容器可以是任意一种服务端服务,Tomcat.Apache.Nginx.IIS,都可以.这里以常用的Nginx为例子做简单的介绍. 需求分析 先来一波需求分析. 单项目 单项目指的是一台服务器部署一个前端服务,使www.xxx.com => index.html的单一指向. 多项目 多项目指的是一台服务器

  • nginx前后端同域名配置的方法实现

    本文主要介绍了nginx前后端同域名配置的方法实现,分享给大家,具体如下: upstream dfct { # ip_hash; server 121.41.19.236:8192; } server { server_name ct.aeert.com; location / { root /opt/web; try_files $uri $uri/ /index.html; error_page 405 =200 http://$host$request_uri; } location ^~

  • docker-compose+nginx部署前后端分离的项目实践

    目录 安装docker 安装必要的系统工具 软件源信息切换 安装 配置镜像加速器 安装docker-compose 安装 权限修改 解决js.css文件404的情况 Vue项目配置 安装docker 安装必要的系统工具 # 更新yum工具 yum update -y # 安装必要的工具 yum install -y yum-utils device-mapper-persistent-data lvm2 软件源信息切换 yum-config-manager --add-repo http://m

  • Docker+Nginx打包部署前后端分离步骤实现

    目录 问题描述 项目打包 前端项目打包 修改vue.config.js文件 router配置中添加base属性 打包前端项目 后端项目打包 将前端和后端的打包文件上传到服务器 nginx反向代理配置 后端通过Dockerfile打包成docker镜像 这里为什么使用docker? 构建Docker镜像 查看构建的镜像 运行容器 运行测试 问题描述 最近做了一个前后端分离的通用权限管理系统,今天想用自己的服务器部署下,本地部署测试是没问题的,但是部署在服务器上还是出现了许多小插曲,这里大概记录一下

  • Docker部署前后端分离项目的实现示例

    目录 一.环境准备 二.运行镜像 解决问题 Redis安装 Nginx安装 三.打包项目 四.部署 一.环境准备 服务器 阿里云服务器 1核+2GB即可 软件 本次部署采用的是 docker,因此软件环境都在 docker 上 我们需要 MySQL 8.0.x版本,Redis,Nginx,提前下好镜像即可 二.运行镜像 MySQL安装 MySQL我用的是8.0.x的版本,在部署过程中出现了一些问题,在这里跟大家分享一下 docker run \ -p 3306:3306 \ --name mys

  • 利用docker-compsoe部署前后端分离的项目方法

    说在前面 我们都知道,docker可以实现很简便的部署环境.现在我们有一个前后端分离的项目,前端基于Vue开发.利用Webpakc打包为dist文件夹.后端则是一个Node.js服务,提供API接口,前端和后端是分离的.所以我们肯定是前端项目一个container,后台项目也是一个container.那么如果是在生产环境,就会产生跨域问题.前端的请求要反向代理到后台.大家肯定首先想到的就是使用 Nginx 设置 proxy_pass .是的没有错.那么我们有了这些想法.我们如何通过 docker

  • Springboot前后端分离项目配置跨域实现过程解析

    项目登录流程如下 用户进入前端登录界面,输入账号密码等,输入完成之后前端发送请求到后端(拦截器不会拦截登录请求),后端验证账号密码等成功之后生成Token并存储到数据库,数据库中包含该Token过期时间,然后返回生成的Token到前端. 前端收到Token,表示登录成功,把这个Token存储本地.然后跳转到用户中心页面,用户中心页面在ajax的请求头中带上Token,跟随请求用户数据接口一起带到后端. 后端通过拦截器拦截到这个请求,去判断这个Token是否有效,有效就放过去做他该做的事情,无效就

  • Vue路由模块化配置的完整步骤

    前言 企业运营后台页面很多,路由如若不区分模块化配置,所有路由挤在同一个文件将不好维护,所以路由的配置也要模块化 分享两个解决方案 -- Vue 路由配置的模块化(Plan A and Plan B) 注册需要 首先路由注册需要啥 // main.js new Vue({ el: '#app', router, store, components: { App }, template: '<App/>' }) // 这里的 router 是这样的 export default new Rout

  • 在Spring中基于Java类进行配置的完整步骤

    前言 JavaConfig 原来是 Spring 的一个子项目,它通过 Java 类的方式提供 Bean 的定义信息,在 Spring4 的版本, JavaConfig 已正式成为 Spring4 的核心功能 . 本文将详细介绍关于Spring中基于Java类进行配置的相关内容,下面话不多说了,来一起看看详细的介绍吧 1 定义 Bean 普通的 POJO 只要标注了 @Configuration 注解,就可以为 Spring 容器提供 Bean 的定义信息. @Configuration pub

  • iOS多Target环境配置的完整步骤

    在项目的开发中, 经常会有测试.正式环境, 下面就来配置一下这两个环境: 一:拷贝源Target (1): 拷贝源Target (2): 更改Target的名称 拷贝结束之后, 将拷贝的Target的名称改为"TestDemo_dis" (3): 更改Scheme的名称 二: 更改General 和 Signing & Capabilities 中的信息 (1)更改测试环境下的General 和 Signing & Capabilities 中的信息 (2)更改正式环境

随机推荐