nginx+tomcat集群配置(4)--rewrite规则和多应用根目录设定思路
前言:
nginx中有一块很重要的概念, 就是rewrite规则. 它会对URL进行修改, 然后进行内部的重定向. rewrite授予了nginx更多的自由, 使得后级服务的接入更加地方便.
本文将简单讲述nginx的rewrite规则和原理, 同时讲解下如何借助rewrite实现单tomcat实例/多Web App服务 对应的多域名根目录访问.
案列目标:
首先来谈一下之前对于多Web App服务对应多域名根目录访问的方案.
注: 一个域名对应一个tomcat实例, 一个tomcat实例只包含一个webapp.
具体可见博文: "nginx+tomcat集群配置(1)---根目录设定和多后端分发配置" .
这种架构模式也是大公司推崇的方式, 毕竟大公司并不缺机器资源, 而且其有一个理直气壮的理由: 隔离和互不影响.
对于小公司/创业公司而言, 机器资源并不丰富, 倘若一个tomcat实例只部署一个web app, 多少有些浪费. 部署多个web app, 域名的映射关系又出了波澜, 因为tomcat中, webapp访问的uri需要添加应用名称. 这又不符合根目录访问的设定.
当然nginx强大的rewrite规则, 可以帮助我们解决该问题, 其最终达成效果的架构如下:
rewrite规则简述:
nginx的rewrite规则用于url的重写, 它和perl的正则表达一致.
rewrite的规则如下:
rewrite regexp replacement [flag]
flag标记取值如下:
last :相当于Apache里德(L)标记,表示完成rewrite;
break;本条规则匹配完成后,终止匹配,不再匹配后面的规则
redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
注: last和break用来实现URL重写,浏览器地址栏URL地址不变
简单规则:
rewrite ^/search/(.*)$ /search.php?q=$1;
输入前的uri为:
http://website.com/search/some-search-keywords
则重写后的uri为:
http://website.com/search.php?q=some-search-keywords
具体可参考博客: "Nginx Rewrite规则初探". 这边不再具体阐述了.
location规则:
location语法:
syntax: location [=|~|~*|^~|@] /uri/ { … }
location涉及普通匹配和正规匹配两大块, 我们先来区分下
• 普通匹配
= 精确匹配
^~ 前缀匹配
注: 对于'^~', 和缺省的前缀匹配相比, 其一旦匹配, 则立即执行, 不会被后续的正则匹配所覆盖. 对于普通匹配, 则按最大前缀为准.
• 正则匹配
~ 区分大小写的正则匹配
~* 不区分大小写的正则匹配
注: 正则匹配之前, 按编辑顺序来排定.
可具体参考博客: Nginx之location 匹配规则详解 .
着重里面的一句名言: 正则 location 匹配让步普通 location 的严格精确匹配结果;但覆盖普通 location 的最大前缀匹配结果.
实验部署:
比如你创建一个web app, 将其部署于tomcat(多应用)中去, 由于默认的规则, 需要在uri中, 添加工程名的前缀才能访问.
比如, 我们假定工程名为shopping, 给予其单独的域名: shopping.website.com.
那么默认的url需要shopping.website.com/shopping才能OK, 现在需要设定为shopping.website.com即可.
如何通过nginx的配置, 来达到我们的目的呢?
在nginx.conf配置中, 添加rewrite规则:
if ( $uri !~ /shopping/ ) {
rewrite ^(.*)$ /shopping/$1 last;
} location /shopping/ {
proxypass <<tomcat server>>
}
注意: rewrite可能会导致递归(nginx阻止了无限递归, 上限为10次).
简单的通过这个修改, 就实现了我们预定的目标.
• 额外的好处:
大家知道, ROOT工程是tomcat的后台管理服务, 按之前的做法, 会牺牲关闭该服务. 如果引入rewrite, 则可以保留该服务. 后记:
一直对nginx学得不够全面和系统, 今日借该实验来强化一下. 权当笔记, 与君共勉.
公众号&游戏站点:
个人微信公众号: 木目的H5游戏世界
个人游戏作品集站点(尚在建设中...): www.mmxfgame.com, 也可直接ip访问: http://120.26.221.54/.
nginx+tomcat集群配置(4)--rewrite规则和多应用根目录设定思路的更多相关文章
- nginx+tomcat集群配置(1)---根目录设定和多后端分发配置
前言: 对于javaer而言, nginx+tomcat集群配置, 已然成了web应用部署的主流. 大公司如此, 小公司亦然. 对于个人开发者而言, 资源有限, 往往多个web应用混部于一台服务器(云 ...
- Nginx+Tomcat集群配置
Nginx+Tomcat集群配置 一台虚拟机作为Nginx服务 两太虚拟机配置Tomcat+jdk环境 Nginx测试 启动: cd usr/local/nginx/sbin ./nginx ---& ...
- nginx+tomcat集群配置(3)---获取真实客户端IP
前言: 在初步构建的nginx+tomcat服务集群时, 发现webserver获取到的客户端ip都是同一个, 皆为作为反向代理服务的nginx所在的机器IP. 这不太符合我们的基本需求, 为将来的数 ...
- nginx+tomcat集群配置(2)---静态和动态资源的分离
前言: 在web性能优化的领域, 经常能听到一个词, 就是静态/动态资源分离. 那静态/动态资源分离究竟是什么呢? 本文不讲文件系统服务, 云存储, 也不讲基于CDN的优化. 就简单讲讲基于nginx ...
- Nginx+Memcached+Tomcat集群配置实践(Sticky Session)
准备工作 创建一个简单的web应用,名为session.其中有两个页面,分别如下所示: 页面login.jsp <%@ page language="java" conten ...
- Nginx+Memcached+Tomcat集群配置(MSM--win7 64bit)
本次主要是在win7 64 上演示操作. web应用构建 Memcached安装配置启动 Tomcat配置 所需jar包 memcached-session-manager 序列化 contextxm ...
- Linux+Apache+Tomcat集群配置
参考: http://blog.csdn.net/bluishglc/article/details/6867358# http://andashu.blog.51cto.com/8673810/13 ...
- 【nginx+tomcat集群】Nginx1.12.2+Tomcat7集群+负载均衡+Session共享
今天想着将项目优化一下,就想的实现集群分布,在本机测试:利用nginx+tomcat实现 通过上一篇博客(http://www.cnblogs.com/qlqwjy/p/8535235.html),N ...
- 160513、nginx+tomcat集群+session共享(linux)
第一步:linux中多个tomcat安装和jdk安装(略) 第二步:nginx安装,linux中安装nginx和windows上有点不同也容易出错,需要编译,这里做介绍 一.安装依赖 gcc open ...
随机推荐
- GZFramework代码生成器插件使用教程
代码生成器分两种 1.基于独立exe生成程序 直接运行软件目录下GZFrameworkCodeGenerate.exe文件即可 2.基于VS插件生成 目录中分为两部分:全局缓存和VS插件 1.添加全局 ...
- CSS3之尖角标签
如图所示,Tag标签的制作通常使用背景图片,现在用CSS3代码就能实现尖角效果(需浏览器支持CSS3属性). 运用CSS3样式实现尖角标签,只需要写简单的HTML结构和CSS样式. <p> ...
- NetBeans IDE配置调试
1.首先需要下载xdebug,在网址中http://www.xdebug.org/download.php可据实际配置环境下载,当然有的Apache安装后已经安装该项,就不必作处理: 2.配置php. ...
- iOS FMDB的使用
简介: SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iOS SDK 很早就支持了 SQLite,在使用时,只需要加入 libsqlite ...
- Oracle的不完全恢复
一.不完全恢复特性 1.不完全恢复 不完全恢复仅仅是将数据恢复到某一个特定的时间点或特定的SCN,而不是当前时间点.不完全恢复会影响整个数据库,需要在MOUNT状 态下进行.在不完全恢复成功之后,通 ...
- spring,maven,dubbo配置
首先我写的这个不是介绍原理的东西,只是指明在我在使用的过程中遇见的一些疑惑的,最后我的理解,你要看详细的配置的话可以看网上的,这个一大堆的.其实dubbo的原理从模型上来看是很简单的东西,完全可以把这 ...
- Android之获取string.xml文件里面的方法
获取string.xml文件里面的方法 在此做个笔记: 1.在AndroidManifest.xml与layout等xml文件里: android:text="@string/resourc ...
- gameui-for-phaser-js更新到最新版本
Hola Cantk是一个功能强大的游戏引擎,它拥有丰富的GUI控件,配合Hola Studio可以快速开发出游戏的UI界面.Phaser是一个流行而且强大的游戏引擎,但是它的GUI控件很少,而且缺乏 ...
- Linux 文件基本属性
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定. 在Linux中我们可 ...
- 【转】PDF电子书分享
http://www.voidcn.com/blog/u013830841/article/p-4343018.html http://www.voidcn.com/blog/u013830841/a ...