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/.
时间: 2024-11-19 06:14:41

nginx+tomcat集群配置(4)--rewrite规则和多应用根目录设定思路的相关文章

nginx+tomcat集群配置(1)---根目录设定和多后端分发配置

前言: 对于javaer而言, nginx+tomcat集群配置, 已然成了web应用部署的主流. 大公司如此, 小公司亦然. 对于个人开发者而言, 资源有限, 往往多个web应用混部于一台服务器(云主机), 如何隔离访问这些服务资源? 彼此又不影响呢? nginx来为你排忧解难, ^_^. 本文将介绍tomcat的简单配置和部署, 以及nginx作为反向代理, 如何分流. 基础架构: 不成文的约定: 1). 一个tomcat容器部署一个webapp应用实例 2). url根目录访问webapp

Web应用优化之nginx+tomcat集群配置+redis管理session

1.nginx的安装 从官网下载一个nginx事务tar.gz版本,centos系统,安装好jdk 第一步解压 第二步:解压完成进入解压目录,执行./configure命令 需要安装gcc编译和pcre库,zlib库 yum -y install gcc yum install pcre-devel yum install zlib-devel ./configure完成后执行make install即可安装成功 2.集群配置流程 一.克隆2台CentOS虚拟机,并安装jdk+tomcat 二.

java集群优化——Nginx+tomcat集群配置-理论篇

我们了解一个道理,就是数据的增长是我们必然面对的问题,因为在技术日益变化的当下,我们收集数据的方式和存储及处理技术不断升级,迫使我们面对这一问题,并且,在数据挖掘日益火热的今天,我们也要对这样的问题加以重视,改变在所难免! 我们曾经想过,在极致优化的情况下,一台普通服务器,是可以挖掘出无穷的潜力的,我的们的确曾做到这一点,用一台2万元的设备,承载了同时1万余人的并发,但是随着技术的衍生,我们需要更灵活地处理应用,我们需要更及时的响应速度,我们需要实时地对数据进行分析和处理!这时,我们必然接触一个

nginx+tomcat集群配置(3)---获取真实客户端IP

前言: 在初步构建的nginx+tomcat服务集群时, 发现webserver获取到的客户端ip都是同一个, 皆为作为反向代理服务的nginx所在的机器IP. 这不太符合我们的基本需求, 为将来的数据挖掘和分析带来了麻烦. 不过不用担心, 本文将简单介绍其背后的原因和原理, 以及具体的解决方案, ^_^. 原因分析: webserver在获取客户端ip时, 默认的方式是通过request.getRemoteAddr(), 这种方式本质是从直连的socket中获取到的. 因此客户端直连web s

nginx+tomcat集群配置(2)---静态和动态资源的分离

前言: 在web性能优化的领域, 经常能听到一个词, 就是静态/动态资源分离. 那静态/动态资源分离究竟是什么呢? 本文不讲文件系统服务, 云存储, 也不讲基于CDN的优化. 就简单讲讲基于nginx+tomcat的实现原理和部署方式. 体验: 我们先来看个例子, 比如访问百度首页. 其访问速度在各个资源的时间消耗比. html文件的获取很快, 时间消耗也少, 大部分时间都消耗在图片和javscript代码文件的下载中. 因此我们对网站访问速度的衡量评估, 有个较理性的定量标准. 基本原理: 动

window环境Nginx+Tomcat集群配置

一.下载地址 Nginx:http://nginx.org/en/download.html Tomcat:http://tomcat.apache.org/ 1.解压Nginx到:E:\server\nginx-1.2.9 命令行启动Nginx: 若果想停止nginx,dos环境运行命令:nginx -s stop 二.相关配置 2.Nginx配置: Nginx配置文件默认在conf目录,主要配置文件为nginx.conf,我们安装在E:\server\nginx-1.2.9.默认主配置文件为

windows下nginx+tomcat集群配置

1.下载配置必要的文件 下载nginx:http://nginx.org/download/nginx-1.6.2.zip 下载tomcat:http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.12/bin/apache-tomcat-8.0.12-windows-x64.zip 2.解压下载文件 解压nginx-1.6.2.zip到E:\nginx-1.6.2目录下: 解压apache-tomcat-8.0.12-windows-x64.z

Nginx+Memcached+Tomcat集群配置

1.   Nginx Nginx是通过将多个Web Server绑定到同一个IP地址下,以实现多个WebServer间的负载均衡,降低单个Web Server的负荷,以提高整体的性能与稳定性. 安装和配置Nginx的简单方式如下: 1)      下载并解压Nginx到本地目录:http://nginx.org/en/download.html 2)      对Nginx的配置主要是对它的配置文件/conf/nginx.conf的修改.如下链接是nginx.conf配置文件各个属性的详细说明:

Nginx+Tomcat 集群部署

1.Nginx + Tomcat 集群部署 简单配置 1 #user nobody; 2 worker_processes 4;#工作进程的个数 3 4 #error_log logs/error.log; 5 #error_log logs/error.log notice; 6 #error_log logs/error.log info; 7 8 #pid logs/nginx.pid; 9 10 11 events { 12 worker_connections 1024; #单个进程连