httpd系列-02-反向代理tomcat-standalone

声明

该文章由大牛 马哥 的相关linux视频资料整理而来。若认为内容侵权请及时通知本人。

相关文章


[TOC]

前言

为什么使用反向代理?

  • 资源类型动/静分离
  • 减少后端tomcat压力
  • ……

有哪些实现方式?

能实现反向代理的httpd模块,有以下两种:

  • mod_proxy
    • mod_proxy只有在apache 2.2.x系列的版本才直接提供
    • 可以提供更丰富的功能和安全性
    • 子模块
      • mod_proxy_http
      • mod_proxy_ajp
      • mod_proxy_balancer
  • mod_jk(mod_jdk2)
    • 对于apache 1.3.x和2.0.x来说mod_jk才更适用
    • 对于mod_jk2,官方已不再提供

** mod_proxy和mod_jk都提供两种连接方式,即http协议和AJP(二进制格式传输)协议 **

所以,更进一步有以下方式来使用apache/httpd实现反向代理:

  • mod_proxy+HTTP
  • mod_proxy+AJP
  • mod_jk+HTTP
  • mod_jk+AJP

配置示例

前提

需要apache已经装载mod_proxy、mod_proxy_http、mod_proxy_ajp和mod_proxy_balancer等模块

可通过 service httpd -D DUMP_MODULES | grep proxy来查看:

[root@c2 test-1]# service httpd -D DUMP_MODULES | grep proxy
 proxy_module (shared)
 proxy_connect_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_fcgi_module (shared)
 proxy_scgi_module (shared)
 proxy_ajp_module (shared)
 proxy_balancer_module (shared)
 proxy_express_module (shared)

参数说明

  • ProxyPreserveHost : On | Off
    • 如果启用此功能,代理会将用户请求报文中的Host:行发送给后端的服务器,而不再使用ProxyPass指定的服务器地址。如果想在反向代理中支持虚拟主机,则需要开启此项,否则就无需打开此功能
  • ProxyVia : On | Off | Full | Block
    • 用于控制在http首部是否使用Via,主要用于在多级代理中控制代理请求的流向。默认为Off,即不启用此功能
    • On表示每个请求和响应报文均添加Via
    • Full表示每个Via行都会添加当前apache服务器的版本号信息
    • Block表示每个代理请求报文中的Via都会被移除
  • ProxyRequests : On|Off
    • 是否开启apache正向代理的功能
    • 启用此项时为了代理http协议必须启用mod_proxy_http模块
    • 如果为apache设置了ProxyPass,则必须将ProxyRequests设置为Off
  • ProxyPass [path] ! | url [key=value key=value ...]]
    • 将后端服务器某URL与当前服务器的某虚拟路径关联起来作为提供服务的路径,path为当前服务器上的某虚拟路径,url为后端服务器上某URL路径
    • 使用此指令时必须将ProxyRequests的值设置为Off
    • 需要注意的是,如果path以“/”结尾,则对应的url也必须以“/”结尾,反之亦然

另外,mod_proxy模块在httpd 2.1的版本之后支持与后端服务器的连接池功能,连接按需创建。
连接池大小或其它设定可以通过在ProxyPass中使用key=value的方式定义。常用的key如下所示:

  • min:连接池的最小容量,此值与实际连接个数无关,仅表示连接池最小要初始化的空间大小。
  • max:连接池的最大容量,每个MPM都有自己独立的容量;都值与MPM本身有关,如Prefork的总是为1,而其它的则取决于ThreadsPerChild指令的值。
  • loadfactor:用于负载均衡集群配置中,定义对应后端服务器的权重,取值范围为1-100。
  • retry:当apache将请求发送至后端服务器得到错误响应时等待多长时间以后再重试。单位是秒钟。

mod_proxy

mod_proxy + HTTP + tomcat(standalone)

<VirtualHost *:80>
    ProxyVia Off
    ProxyRequests Off
    ProxyPreserveHost Off
    <Proxy *>
      Require all granted
    </Proxy>
      ProxyPass  /  http://c2:8080/
      ProxyPassReverse  /  http://c2:8080/
    <Location  / >
      Require all granted
    </Location>
</VirtualHost>

mod_proxy + AJP + tomcat(standalone)

<VirtualHost *:80>
    ProxyVia On
    ProxyRequests Off
    ProxyPreserveHost Off
    <Proxy *>
      Require all granted
    </Proxy>
      ProxyPass  /  ajp://c2:8009/
      ProxyPassReverse  /  ajp://c2:8009/
    <Location  / >
      Require all granted
    </Location>
</VirtualHost>

mod_jk

mod_jk是ASF的一个项目,是一个工作于apache端基于AJP协议与Tomcat通信的连接器,它是apache的一个模块,是AJP协议的客户端(服务端是Tomcat的AJP连接器)。

环境准备

编译安装mod_jk connector

# 下载
wget http://apache.fayea.com/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.41-src.tar.gz
# 解压
tar -zxvf tomcat-connectors-1.2.41-src.tar.gz
cd tomcat-connectors-1.2.41-src/native/


# 编译安装
./configure --with-apxs=/usr/local/apache244/bin/apxs
make && make install

mod_jk + AJP + tomcat(standalone)

apache/httpd配置

# 加载模块
LoadModule  jk_module  modules/mod_jk.so
# 篇日志文件路径
JkWorkersFile  /etc/httpd/extra/workers.properties
# 日志文件路径
JkLogFile  logs/mod_jk.log
# 日志级别
JkLogLevel  debug
# tomcatA和tomcat配置文件server.xml中Engine标签的jvmRoute属性一致
JkMount  /*  tomcatA
JkMount  /status/  stat1

/etc/httpd/extra/workers.properties

worker.list=tomcatA,stat1
worker.tomcatA.port=8009
worker.tomcatA.host=c2
worker.tomcatA.type=ajp13
worker.tomcatA.lbfactor=1
worker.stat1.type = status

tomcat server.xml

<Engine name="Catalina" defaultHost="c2" jvmRoute="tomcatA">

  <Realm className="org.apache.catalina.realm.LockOutRealm">
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
           resourceName="UserDatabase"/>
  </Realm>

  <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

  </Host>


  <Host name="c2" appBase="/web" unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="webapps/test-1" reLoadable="true"/>
  </Host>
</Engine>

属性说明

  • woker.<work name>.type
    • ajp13:此类型表示当前worker为一个运行着的Tomcat实例。
    • lb:lb即load balancing,专用于负载均衡场景中的woker;此worker并不真正负责处理用户请求,而是将用户请求调度给其它类型为ajp13的worker。
    • status:用户显示分布式环境中各实际worker工作状态的特殊worker,它不处理任何请求,也不关联到任何实际工作的worker实例。
  • host:Tomcat 7的worker实例所在的主机
  • port:Tomcat 7实例上AJP1.3连接器的端口
  • connection_pool_minsize:最少要保存在连接池中的连接的个数;默认为pool_size/2
  • connection_pool_timeout:连接池中连接的超时时长
  • mount:由当前worker提供的context路径,如果有多个则使用空格格开.此属性可以由JkMount指令替代
  • retries:错误发生时的重试次数
  • socket_timeout:mod_jk等待worker响应的时长,默认为0,即无限等待
  • socket_keepalive:是否启用keep alive的功能,1表示启用,0表示禁用
  • lbfactor:worker的权重,可以在负载均衡的应用场景中为worker定义此属性
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容