uriworkermap.properties配置

uriworkermap.properties配置

介绍

通过定义映射规则,可以配置从Web服务器到tomcat的请求转发。这样的规则将请求映射到工人。映射的请求部分由URI模式描述,工作器由其工作者名称描述。

所谓的uriworkermap文件是一种定义规则的机制,该规则适用于所有Web服务器。还有其他用于定义规则的Web服务器特定的配置选项,将在参考页上主要讨论如何为各个Web服务器配置tomcat连接器。

该文件的名称通常为uriworkermap.properties,尽管可以在Web服务器中对其进行配置。请查阅Web服务器特定的文档页面,以了解如何启用uriworkermap文件。

uriworkermap文件支持的主要功能是

  • 支持规则文件中的注释。
  • 完全匹配和通配符匹配,用于映射目录以及所有内容的快捷方式。
  • 排除规则,禁用规则和规则优先级。
  • 规则扩展,可按规则修改工作人员行为。
  • 虚拟主机集成:uri映射规则可以表示每个虚拟主机。尽管详细信息是特定于Web服务器的。
  • 动态重新加载:定期检查文件是否有更改。新版本将自动重新加载,而无需重新启动Web服务器。
  • 与状态工作者集成。
以下各节将更详细地描述这些方面。

 

句法

行格式

该文件具有基于行的格式。没有连续字符,因此每个规则都需要在一行上定义。每个规则都是一对,由URI模式和工作人员名称组成,并以等号'='组合:

/myapp=myworker
URI模式区分大小写。

 

注释,空格

字符“#”之后的所有文本(包括字符“#”)都将被忽略,并可用于注释。前导和尾随空格在URI模式以及工作人员名称周围进行了修剪。以下定义都是等效的:

# This is a white space example
/myapp=myworker
  /myapp=myworker
/myapp  =  myworker

 

URI模式

在URI模式中,可以使用三个特殊字符'*','?' 和'|'。字符“ *”是通配符,可与URI中的任意数量的任意字符“?”匹配 完全匹配一个字符。每个URI模式都必须以字符'/'开头,或者以'*'或'?'开头,还可以选择以修饰符'!'的任意组合作为前缀。和“-”(请参阅​​下一节)。

# Mapping the URI /myapp1 and everything under /myapp1/:
/myapp1=myworker-a
/myapp1/*=myworker-a
# Mapping all URI which end with a common suffix:
*.jsp=myworker
*.do=myworker
由于映射特定位置及其内部所有内容的第一种情况非常普遍,因此字符“ |” 提供了一个方便的快捷方式:
# Mapping the URI /myapp1 and everything under /myapp1/:
/myapp1|/*=myworker-a
模式“ X | Y”完全等效于两个映射“ X”和“ XY”。

 

排除,禁用和优先

排除和禁用规则

排除规则允许定义URI规则中的排除条件,该规则会将请求转发给tomcat。如果排除规则匹配,则不会转发请求。Web服务器通常使用它来提供静态内容。规则以“!”为后缀是排除规则:

# Mapping the URI /myapp and everything under /myapp/:
/myapp|/*=myworker
# Exclude the subdirectory static:
!/myapp/static|/*=myworker
# Exclude some suffixes:
!*.html=myworker
仅当普通规则中的工作程序名称与排除规则中的工作程序名称相同时,排除规则才会覆盖普通映射规则。从JK版本1.2.26开始,您可以通过在排除规则中使用星号'*'作为工作名称来将排除规则应用于任何工作程序。排除工作人员名称中不允许使用更复杂的模式。
# Mapping the webapps /myapp1 and /myapp2:
/myapp1|/*=myworker1
/myapp2|/*=myworker2
# Exclude the all subdirectories static for all workers:
!/*/static|/*=*
# Exclude some suffixes for all workers:
!*.html=*

 

如果您的Web服务器合并了来自各种来源的规则,并且您想禁用以前定义的任何规则,则规则禁用起作用。由于uriworkermap文件是动态重新加载的,因此您可以使用它暂时禁用请求转发:如果规则的后缀为'-',则该规则将被禁用:

# We are not in maintenance.
# The maintenance rule got defined somewhere else.
-/*=maintenance
排除规则也可以被禁用,然后规则以“-!”开头。

 

映射优先级

首先应用限制性最强的URI模式。更精确地,URI模式按模式中的'/'字符数排序(最高的数字在前),等号的规则按其字符串长度(最长的在前)排序。

如果两个区别仍然不能满足要求,则考虑规则的定义来源。首先是uriworkermap.properties中定义的规则,然后是JkMount(对于Apache HTTP Server)定义的规则,然后是使用mount属性在worker.properties内部的规则。

所有禁用的规则都将被忽略。在应用所有常规规则后,将应用排除规则。

对于以下配置冲突,没有定义的行为:在相同的定义源中使用相同的URI模式,但使用不同的工作程序目标。

规则扩展

规则扩展是在1.2.27版本中添加的,在早期版本中不可用。

句法

规则扩展是其他属性,可以附加到任何规则。它们被添加到规则的末尾,每个扩展名之间用分号分隔:

# This is an extension example,
# setting a reply_timeout of 1 minute
# only for this mapping.
/myapp=myworker;reply_timeout=60000
#
# This is an example using multiple extensions
/myapp=myloadbalancer;reply_timeout=60000;stopped=member1
通过规则扩展设置的属性始终会覆盖工作程序定义文件中的冲突配置。

 

扩展名Reply_timeout

该扩展reply_timeout为单个映射规则设置回复超时。

# Setting a reply_timeout of 1 minute
# only for this mapping.
/myapp=myworker;reply_timeout=60000
它会覆盖reply_timeout为工作人员定义的任何内容。该扩展允许为工作人员设置合理的默认回复超时,并为URL设置更宽松的回复超时,众所周知,这些URL会启动耗时的任务。有关答复超时的一般说明,请参见 超时文档。

 

扩展名sticky_ignore

该扩展sticky_ignore将禁用单个映射规则的会话粘性。

# Disable session stickyness
# only for this mapping.
/myapp/loginform.jsp=myworker;sticky_ignore=1
使用基于cookie的会话粘性时,此扩展对于优化负载平衡很有用。在这种情况下,只要她保持浏览器保持打开状态,即使启动了会话的用户离开了使用该会话的应用程序部分,启动会话的用户的任何请求也将被发送到相同的Tomcat实例。例如,您可以在用户请求登录表单时设置此环境变量,以确保此初始会话请求是非粘性平衡的。

 

此扩展自版本1.2.33起可用。

扩展无状态

该扩展stateless仅在使用基于会话的负载平衡时才有用。在这种情况下,通常将没有会话ID的任何请求都计为新会话。如果使用stateless扩展名标记映射规则,则与映射规则匹配的请求将不算作新会话,即使它们没有会话ID。

# Don't let static content trash our session balancing
/myapp/static/*=myworker;stateless=1
此扩展自版本1.2.33起可用。

 

扩展激活/禁用/停止

扩展名activedisabledstopped 可以在负载均衡器映射规则中使用,以将负载均衡器的选定成员设置为特殊的激活状态。

# Stop forwarding only for member1 of loadbalancer
/myapp=myloadbalancer;stopped=member1
多个成员必须用逗号或空格分隔:
# Stop forwarding for member01 and member02 of loadbalancer
# Disable forwarding for member21 and member22 of loadbalancer
/myapp=myloadbalancer;stopped=member01,member02;disabled=member21,member22
有关激活状态的确切含义,请参见激活说明 。

 

扩展fail_on_status

该扩展名fail_on_status可以在任何规则中使用:

# Send 503 instead of 404 and 500,
# and if we get a 503 also set the worker to error
/myapp=myworker;fail_on_status=-404,-500,503
多个状态代码必须用逗号分隔。有关属性的确切含义,请参见fail_on_status的描述 。

 

扩展use_server_errors

该扩展use_server_errors允许让Web服务器发送错误页面,而不是后端(例如Tomcat)错误页面。如果要发送自定义的错误页面,但这些错误页面不是所有Web应用程序的一部分,则此功能很有用。然后可以将它们放到Web服务器上。

的值为use_server_errors正数。发送到后端的任何请求,如果返回的HTTP状态代码均大于或等于http状态代码use_server_errors,则将使用Web服务器针对该状态代码的错误页面将其答复给客户端。

# Use web server error page for all errors
/myapp=myworker;use_server_errors=400
# Use web server error page only for technical errors
/myotherapp=myworker;use_server_errors=500

 

控制负载均衡器粘性的扩展

扩展名

  • session_cookie
  • session_path
  • set_session_cookie
  • session_cookie_path
允许定义每个安装使用相同名称的负载均衡器工作器属性。请参阅worker.properties配置参考中的描述 。

 

虚拟主机集成

用于Microsoft IIS的ISAPI重定向器

当将ISAPI重定向器用于Microsoft IIS时,可以通过在URI模式前面加上虚拟主机信息来将单个规则限制为特殊的虚拟主机。规则是,URL必须以主机名作为前缀。

# Use www.foo.org as virtual host
/www.foo.org/myapp/*=myworker
# Use www.bar.org as virtual host
/www.bar.org/myapp/*=myworker
# Normal mapping
/mysecondapp/*=myworker

 

请注意,/ mysecondapp / *将映射到存在的所有虚拟主机。如果需要防止映射到某些特定虚拟主机,则必须使用排除规则

# Make sure the myapp is accessible by all virtual hosts
/myapp/*=myworker
# Disable mapping myapp for www.foo.org virtual host
!/www.foo.org/myapp/*=myworker

 

适用于Apache HTTP Server的mod_jk

对于Apache HTTP Server,您可以为每个虚拟主机定义单独的uriworkermap文件。指令JkMountFile可以在主服务器和每个虚拟主机中使用。如果虚拟主机不使用JkMountfile,但是JkMountCopy设置为“ On”,则它将从主服务器继承JkMountFile。如果您希望所有虚拟主机从主服务器继承安装,则可以在主服务器中将JkMountCopy设置为“全部”。

动态重装

处理请求时,tomcat连接器将检查uriworkermap文件的文件修改时间。为了保持较低的性能损失,只有在上一次检查至少在n秒钟前发生时,才会发生这种情况。

对于Apache HTTP Server,可以使用指令JkMountFileReload配置间隔“ n”,对于Microsoft IIS,可以使用worker_mount_reload属性。默认值为60秒。值为“ 0”将关闭重新加载。

如果文件更改,它将完全重新加载。如果存在除uriworkermap文件以外的其他规则(例如,worker.properties的mount属性或Apache HTTP Server的JkMount),则新的uriworkermap文件将与这些规则动态合并,就像在重新启动Web服务器时一样。

在1.2.19版之前,重新加载的行为略有不同:它不断将uriworkermap文件的全部内容添加到规则映射中。通过在新文件中将规则定义为禁用,合并规则被消除,重复的规则被消除,旧规则可以被禁用。规则从未删除。

状态工作者集成

状态工作器的配置视图还显示了各种映射规则。在每个工作人员进行配置之后,列出了转发给该工作人员的规则。该列表包含四列:

  • 虚拟服务器的名称
  • URI模式,前缀为“-”表示禁用的模式,“!” 排除模式
  • 规则的类型:完全或通配符
  • 以及规则定义的来源:worker.properties文件(装载属性)的“ worker definition”,Apache HTTP Server JkMount及其亲属的“ JkMount”,以及uriworkermap文件的“ uriworkermap”。

 

注意:从版本1.2.26开始,以下限制已被删除。
对于Apache HTTP Server,有一个重要的细微之处:转到状态工作程序的请求在某些服务器(主服务器或虚拟服务器)的上下文中执行。状态工作器将仅显示为此服务器(主服务器或虚拟服务器)定义的映射规则。
在1.2.25版之前,该列表包含三列:

  • 规则的类型:“精确”或“通配符”,最终以“已禁用”或“卸载”为前缀(对于排除规则)
  • URI模式
  • 以及规则定义的来源:worker.properties文件(装载属性)的“ worker definition”,Apache HTTP Server JkMount及其亲属的“ JkMount”,以及uriworkermap文件的“ uriworkermap”。

参考资料:

http://tomcat.apache.org/connectors-doc/reference/uriworkermap.html

上一篇:K8S-Statefulset(有状态负载)原理和实践


下一篇:CentOS 使用Docker 部署多台Springboot程序,并用Nginx做负载均衡