在编写高速缓存代理插件程序之前,需要了解代理服务器的工作方式。可以将代理服务器的行为分成若干不同的处理步骤。对于其中每个步骤,您可以使用该 API 提供自己的定制函数。例如,要在读取客户机请求之后但在执行任何其他处理之前执行某些操作吗?或者,也许要在认证期间执行特殊例程,然后在发送请求的文件之后再次执行这些例程。
该 API 附带了一个预定义函数库。您的插件程序可以调用预定义 API 函数以便与代理服务器进程交互(例如,处理请求、读取或写入请求头或者写入至代理服务器的日志)。这些函数应该不会与您编写的插件函数混淆,您编写的插件函数由代理服务器进行调用。预定义函数和宏中描述了预定义函数。
您应该通过在服务器配置文件中使用相应的高速缓存代理 API 伪指令在适当的步骤中指示代理服务器调用插件函数。用于 API 步骤的高速缓存代理配置伪指令中描述了这些伪指令。
本文档包含以下内容:
可以使用这些组件和过程来编写自己的高速缓存代理插件程序。
可以根据服务器在该阶段执行的处理类型将代理服务器的基本操作分成若干步骤。每个步骤都包括一个接合点,程序的指定部分可以在该接合点运行。通过将 API 伪指令添加到高速缓存代理配置文件 (ibmproxy.conf),可以指示要在特定步骤中调用哪个插件函数。通过包括用于特定进程步骤的多个伪指令,可以在该步骤期间调用若干插件函数。
某些步骤是服务器请求进程的一部分。换句话说,代理服务器在每次处理请求时将执行这些步骤。将独立于请求处理执行其他步骤;即,无论是否在处理请求,服务器都将执行这些步骤。
您的已编译程序驻留在一个共享对象中,例如,DLL 或 .so 文件,这取决于您的操作系统。当服务器执行其请求进程步骤时,服务器将调用与每个步骤相关联的插件函数,直到其中一个函数指示它已处理该请求为止。如果您为特定步骤指定多个插件函数,那么将按其伪指令出现在配置文件中的顺序调用这些函数。
如果插件函数未处理该请求(您未包括用于该步骤的高速缓存代理 API 伪指令,或者用于该步骤的插件函数返回了 HTTP_NOACTION),那么服务器将对该步骤执行缺省操作。
注意:此指示对于除“服务”步骤之外的所有步骤都是正确的;“服务”步骤没有缺省操作。
图 1 说明了代理服务器进程的步骤并定义了与请求处理相关的步骤的处理顺序。
将独立于任何客户机请求的处理来执行图中的四个步骤。这些步骤与代理服务器的运行和维护相关。它们包括以下各项:
以下列表说明了图 1 中图示的每个步骤的目的。注意,并不保证为特定请求调用所有步骤。
在读取请求之后但在执行任何其他操作之前执行处理。
如果此步骤返回一个表明已处理该请求的指示 (HTTP_OK),那么服务器将绕过请求进程中的其他步骤并仅执行转换器、记录和退出后步骤。
使用存储的安全性令牌来检查保护、ACL 和其他访问控制的实际路径并生成基本认证所需的 WWW-Authenticate 头。如果要编写您自己的插件函数来替换此步骤,那么您必须自己生成这些头。
请参阅认证和授权,以了解更多信息。
解码、验证和存储安全性令牌。
请参阅认证和授权,以了解更多信息。
在授权和对象定位之后但在满足该请求之前执行处理。
如果此步骤返回一个表明已处理该请求的指示 (HTTP_OK),那么服务器将绕过请求进程中的其他步骤并仅执行转换器、记录和退出后步骤。
在 AIX® 系统上,您需要一个列示插件函数的导出文件(例如,libmyapp.exp),并且必须将其与高速缓存代理 API 导入文件 libhttpdapi.exp 链接在一起。
在 Linux、HP-UX 和 Solaris 系统上,必须将其与 libhttpdapi 和 libc 库链接在一起。
在 Windows 系统上,您需要一个列示插件函数的模块定义文件 (.def),并且必须将其与 HTTPDAPI.LIB 链接在一起。
一定要在函数定义中包括 HTAPI.h 并且使用 HTTPD_LINKAGE 宏。此宏确保所有函数都使用相同的调用约定。
使用下列编译和链接命令作为准则。
cc_r -c -qdbxextra -qcpluscmt foo.c
cc_r -bM:SRE -bnoentry -o libfoo.so foo.o -bI:libhttpdapi.exp -bE:foo.exp
(此命令分两行显示仅为了便于阅读。)
cc -Ae -c +Z +DAportable
aCC +Z -mt -c +DAportable
gcc -c foo.c
ld -G -Bsymbolic -o libfoo.so foo.o -lhttpdapi -lc
cc -mt -Bsymbolic -c foo.c
cc -mt -Bsymbolic -G -o libfoo.so foo.o -lhttpdapi -lc
cl /c /MD /DWIN32 foo.c
link httpdapi.lib foo.obj /def:foo.def /out:foo.dll /dll
要指定导出,请使用下列其中一种方法:
遵循插件函数原型中显示的语法,以便为已定义的请求处理步骤编写您自己的程序函数。
您的每个函数必须为返回码参数填入值以指示所执行的操作:
每个高速缓存代理步骤的函数原型显示了要使用的格式并说明了这些原型可以执行的处理类型。注意,没有预定义函数名。您必须给函数指定唯一名称,并且您可以选择自己的命名约定。为了便于关联,本文档使用与服务器的处理步骤相关的名称。
在其中每个插件函数中,某些预定义 API 函数都有效。某些预定义函数并非对所有步骤都有效。从所有这些插件函数中调用下列预定义 API 函数时,这些 API 函数都有效:
在函数原型描述中指明了其他有效或无效 API 函数。
可以将发送到函数的 handle 参数的值作为第一个自变量传递到预定义函数。预定义函数和宏中描述了预定义 API 函数。
void HTTPD_LINKAGE ServerInitFunction ( unsigned char *handle, unsigned long *major_version, unsigned long *minor_version, long *return_code )
在服务器初始化期间装入模块时,将调用为此步骤定义的函数。它使您有机会在接受任何请求之前执行初始化。
虽然将调用所有服务器初始化函数,但此步骤中某个函数的错误返回码会导致服务器忽略模块(返回了错误代码的函数所在的模块)中配置的所有其他函数。(即,将不调用返回了错误的函数所在的共享对象中包含的任何其他函数。)
version 参数包含代理服务器的版本号,这些版本号由高速缓存代理提供。
void HTTPD_LINKAGE PreExitFunction ( unsigned char *handle, long *return_code )
在读取每个请求之后但在执行任何处理之前,将对该请求调用为此步骤定义的函数。在高速缓存代理处理客户机的请求之前,可以使用此步骤中的插件来访问该请求。
preExit 函数的有效返回码如下:
不能使用其他返回码。
如果此函数返回 HTTP_OK,那么代理服务器假定已处理请求。将绕过所有后续请求处理步骤,并且仅执行响应步骤(转换器、记录和 退出后)。
在此步骤期间,所有预定义 API 函数都有效。
void HTTPD_LINKAGE MidnightFunction ( unsigned char *handle, long *return_code )
为此步骤定义的函数每天在午夜运行,并且它不包含任何请求上下文。例如,可以使用该函数来调用子进程以分析日志。(注意,在此步骤期间进行的大量处理会影响记录。)
void HTTPD_LINKAGE AuthenticationFunction ( unsigned char *handle, long *return_code )
将根据每个请求的认证模式对该请求调用为此步骤定义的函数。可以使用此函数来定制随请求一起发送的安全性令牌的验证方式。
void HTTPD_LINKAGE NameTransFunction ( unsigned char *handle, long *return_code )
将对每个请求调用为此步骤定义的函数。如果仅希望对与某个 URL 模板匹配的请求调用该插件函数,那么可以在配置文件伪指令中指定该模板。名称转换步骤在处理请求之前进行,它提供了一个用于将 URL 映射至对象(例如文件名)的机制。
void HTTPD_LINKAGE AuthorizationFunction ( unsigned char *handle, long *return_code )
将对每个请求调用为此步骤定义的函数。如果仅希望对与某个 URL 模板匹配的请求调用该插件函数,那么可以在配置文件伪指令中指定该模板。授权步骤在处理请求之前进行,可以用于验证是否可以将所标识的对象返回给客户机。如果正在执行基本认证,那么必须生成必需的 WWW-Authenticate 头。
void HTTPD_LINKAGE ObjTypeFunction ( unsigned char *handle, long *return_code )
将对每个请求调用为此步骤定义的函数。如果仅希望对与某个 URL 模板匹配的请求调用该插件函数,那么可以在配置文件伪指令中指定该模板。对象类型步骤在处理请求之前进行,可以用于检查对象是否存在,并可以用于输入对象。
void HTTPD_LINKAGE PostAuthFunction ( unsigned char *handle, long *return_code )
在对请求进行授权之后但在执行任何处理之前,将调用为此步骤定义的函数。如果此函数返回 HTTP_OK,那么代理服务器假定已处理请求。将绕过所有后续请求步骤,并且仅执行响应步骤(转换器、记录和 退出后)。
在此步骤期间,所有服务器预定义函数都有效。
void HTTPD_LINKAGE ServiceFunction ( unsigned char *handle, long *return_code )
将对每个请求调用为此步骤定义的函数。如果仅希望对与某个 URL 模板匹配的请求调用该插件函数,那么可以在配置文件伪指令中指定该模板。如果在退出前或授权后步骤中未满足请求,那么服务步骤将满足该请求。
在此步骤期间,所有服务器预定义函数都有效。
请参阅 WebSphere Application Server 高速缓存代理 Administration Guide 中的 Enable 伪指令,以了解有关配置根据 HTTP 方法而不是 URL 来执行的 Service 函数的信息。
对于此步骤,您必须实现下列四个函数。(您的函数名不需要与这些名称匹配。)
void * HTTPD_LINKAGE openFunction ( unsigned char *handle, long *return_code )
open 函数执行处理此流的数据所需要的任何初始化(例如缓冲区分配)。除 HTTP_OK 之外的任何返回码将导致此过滤器异常中止(将不调用 write 和 close 函数)。您的函数可以返回一个空指针,以便可以为结构分配空间并在后续函数的 correlator 参数中将该指针传回给您。
void HTTPD_LINKAGE writeFunction ( unsigned char *handle, unsigned char *data, /* response data sent by the origin server */ unsigned long *length, /* length of response data */ void *correlator, /* pointer returned by the 'open' function */ long *return_code )
write 函数处理数据并可以使用新数据或已更改的数据调用服务器的预定义 HTTPD_write() 函数。该插件不能尝试释放传递给它的缓冲区,也不能期望服务器释放它接收的缓冲区。
如果您决定不在 write 函数的作用域期间更改数据,那么您仍然必须在 open、write 或 close 函数中的任意一个函数的作用域期间调用 HTTPD_write() 函数,以将响应数据传递给客户机。correlator 自变量是指向 open 例程中返回的数据缓冲区的指针。
void HTTPD_LINKAGE closeFunction ( unsigned char *handle, void *correlator, long *return_code )
close 函数执行完成此流的数据处理所需要的任何清除操作(例如清空和释放相关因子缓冲区)。correlator 自变量是指向 open 例程中返回的数据缓冲区的指针。
void HTTPD_LINKAGE errorFunction ( unsigned char *handle, void *correlator, long *return_code )
error 函数允许在发送错误页之前执行清除操作(例如清空和/或释放已缓冲的数据)。此时,将调用 open、write 和 close 函数来处理错误页。correlator 自变量是指向 open 例程中返回的数据缓冲区的指针。
注意:
void HTTPD_LINKAGE GCAdvisorFunction ( unsigned char *handle, long *return_code )
将在垃圾回收期间对高速缓存中的每个文件调用为此步骤定义的函数。此函数使您能够影响将保存和废弃哪些文件。有关更多信息,请参阅 GC_* 变量。
void HTTPD_LINKAGE ProxyAdvisorFunction ( unsigned char *handle, long *return_code )
将在每个代理请求的服务期间调用为此步骤定义的函数。例如,可以使用该函数来设置 USE_PROXY 变量。
void HTTPD_LINKAGE LogFunction ( unsigned char *handle, long *return_code )
在处理每个请求并且关闭与客户机的通信之后,将对该请求调用为此步骤定义的函数。如果仅希望对与某个 URL 模板匹配的请求调用该插件函数,那么可以在配置文件伪指令中指定该模板。无论请求处理成功与否,都将调用此函数。如果不希望您的记录插件覆盖缺省记录机制,请将返回码设置为 HTTP_NOACTION,而不是设置为 HTTP_OK。
void HTTPD_LINKAGE ErrorFunction ( unsigned char *handle, long *return_code )
将对失败的每个请求调用为此步骤定义的函数。如果仅希望对与某个 URL 模板匹配的失败请求调用该插件函数,那么可以在配置文件伪指令中指定该模板。错误步骤使您有机会定制错误响应。
void HTTPD_LINKAGE PostExitFunction ( unsigned char *handle, long *return_code )
将对每个请求调用为此步骤定义的函数,而无论该请求成功与否。此步骤使您能够对插件为了处理请求而分配的任何资源执行清除任务。
void HTTPD_LINKAGE ServerTermFunction ( unsigned char *handle, long *return_code )
在服务器执行有序关闭时,将调用为此步骤定义的函数。该函数使您能够清除服务器初始化步骤期间分配的资源。不要在此步骤中调用任何 HTTP_* 函数(结果是不可预测的)。如果配置文件中有多个用于服务器终止的高速缓存代理 API 伪指令,那么将调用所有这些伪指令。
这些返回码遵循万维网联盟 (www.w3.org/pub/WWW/Protocols/) 发布的 HTTP 1.1 规范 RFC 2616。您的插件函数必须返回其中一个值。
值 | 返回码 |
0 | HTTP_NOACTION |
100 | HTTP_CONTINUE |
101 | HTTP_SWITCHING_PROTOCOLS |
200 | HTTP_OK |
201 | HTTP_CREATED |
202 | HTTP_ACCEPTED |
203 | HTTP_NON_AUTHORITATIVE |
204 | HTTP_NO_CONTENT |
205 | HTTP_RESET_CONTENT |
206 | HTTP_PARTIAL_CONTENT |
300 | HTTP_MULTIPLE_CHOICES |
301 | HTTP_MOVED_PERMANENTLY |
302 | HTTP_MOVED_TEMPORARILY |
302 | HTTP_FOUND |
303 | HTTP_SEE_OTHER |
304 | HTTP_NOT_MODIFIED |
305 | HTTP_USE_PROXY |
307 | HTTP_TEMPORARY_REDIRECT |
400 | HTTP_BAD_REQUEST |
401 | HTTP_UNAUTHORIZED |
403 | HTTP_FORBIDDEN |
404 | HTTP_NOT_FOUND |
405 | HTTP_METHOD_NOT_ALLOWED |
406 | HTTP_NOT_ACCEPTABLE |
407 | HTTP_PROXY_UNAUTHORIZED |
408 | HTTP_REQUEST_TIMEOUT |
409 | HTTP_CONFLICT |
410 | HTTP_GONE |
411 | HTTP_LENGTH_REQUIRED |
412 | HTTP_PRECONDITION_FAILED |
413 | HTTP_ENTITY_TOO_LARGE |
414 | HTTP_URI_TOO_LONG |
415 | HTTP_BAD_MEDIA_TYPE |
416 | HTTP_BAD_RANGE |
417 | HTTP_EXPECTATION_FAILED |
500 | HTTP_SERVER_ERROR |
501 | HTTP_NOT_IMPLEMENTED |
502 | HTTP_BAD_GATEWAY |
503 | HTTP_SERVICE_UNAVAILABLE |
504 | HTTP_GATEWAY_TIMEOUT |
505 | HTTP_BAD_VERSION |
您可以从自己的插件函数调用服务器的预定义函数和宏。您必须使用其预定义名称并遵循下面所描述的格式。在参数描述中,字母 i 指示输入参数,字母 o 指示输出参数,而 i/o 则指示同时用于输入和输出的参数。
其中每个函数都将根据请求成功与否返回一个 HTTPD 返回码。预定义函数和宏的返回码中描述了这些代码。
在调用这些函数时,请使用对您的插件提供的句柄作为第一个参数。否则,函数将返回 HTTPD_PARAMETER_ERROR 错误代码。不接受 NULL 作为有效句柄。
void HTTPD_LINKAGE HTTPD_authenticate ( unsigned char *handle, /* i; handle */ long *return_code /* o; return code */ )
void HTTPD_LINKAGE HTTPD_cacheable_url ( unsigned char *handle, /* i; handle */ unsigned char *url, /* i; URL to check */ unsigned char *req_method, /* i; request method for the URL */ long *retval /* o; return code */ )
返回值 HTTPD_SUCCESS 指示 URL 内容可高速缓存;HTTPD_FAILURE 指示该内容不可高速缓存。HTTPD_INTERNAL_ERROR 也是此函数的可能返回码。
void HTTPD_LINKAGE HTTPD_close ( unsigned char *handle, /* i; handle */ long *return_code /* o; return code */ )
void HTTPD_LINKAGE HTTPD_exec ( unsigned char *handle, /* i; handle */ unsigned char *name, /* i; name of script to run */ unsigned long *name_length, /* i; length of the name */ long *return_code /* o; return code */ )
void HTTPD_LINKAGE HTTPD_extract ( unsigned char *handle, /* i; handle */ unsigned char *name, /* i; name of variable to extract */ unsigned long *name_length, /* i; length of the name */ unsigned char *value, /* o; buffer in which to put the value */ unsigned long *value_length, /* i/o; buffer size */ long *return_code /* o; return code */ )
如果此函数返回代码 HTTPD_BUFFER_TOO_SMALL,那么您请求的缓冲区大小对于所抽取的值来说不够大。在这种情况下,此函数不会使用该缓冲区,但是会使用您成功抽取此值所需要的缓冲区大小更新 value_length 参数。请使用至少与返回的 value_length 一样大的缓冲区重试抽取操作。
void HTTPD_LINKAGE HTTPD_file ( unsigned char *handle, /* i; handle */ unsigned char *name, /* i; name of file to send */ unsigned long *name_length, /* i; length of the name */ long *return_code /* o; return code */ )
const unsigned char * /* o; value of variable */ HTTPD_LINKAGE httpd_getvar( unsigned char *handle, /* i; handle */ unsigned char *name, /* i; variable name */ unsigned long *n /* i; index number for the array containing the header */ )
包含头的数组的下标从 0 开始。要获取数组中的第一项,请使用值 0 来表示 n;要获取第五项,请使用值 4 来表示 n。
void HTTPD_LINKAGE HTTPD_log_access ( unsigned char *handle, /* i; handle */ unsigned char *value, /* i; data to write */ unsigned long *value_length, /* i; length of the data */ long *return_code /* o; return code */ )
注意,在服务器访问日志中写入百分比符号 (%) 时,不需要使用转义符号。
void HTTPD_LINKAGE HTTPD_log_error ( unsigned char *handle, /* i; handle */ unsigned char *value, /* i; data to write */ unsigned long *value_length, /* i; length of the data */ long *return_code /* o; return code */ )
注意,在服务器错误日志中写入百分比符号 (%) 时,不需要使用转义符号。
void HTTPD_LINKAGE HTTPD_log_event ( unsigned char *handle, /* i; handle */ unsigned char *value, /* i; data to write */ unsigned long *value_length, /* i; length of the data */ long *return_code /* o; return code */ )
注意,在服务器事件日志中写入百分比符号 (%) 时,不需要使用转义符号。
void HTTPD_LINKAGE HTTPD_log_trace ( unsigned char *handle, /* i; handle */ unsigned char *value, /* i; data to write */ unsigned long *value_length, /* i; length of the data */ long *return_code /* o; return code */ )
注意,在服务器跟踪日志中写入百分比符号 (%) 时,不需要使用转义符号。
void HTTPD_LINKAGE HTTPD_open ( unsigned char *handle, /* i; handle */ long *return_code /* o; return code */ )
void HTTPD_LINKAGE HTTPD_proxy ( unsigned char *handle, /* i; handle */ unsigned char *url_name, /* i; URL for the proxy request */ unsigned long *name_length, /* i; length of URL */ void *request_body, /* i; body of request */ unsigned long *body_length, /* i; length of body */ long *return_code /* o; return code */ )
void HTTPD_LINKAGE HTTPD_read ( unsigned char *handle, /* i; handle */ unsigned char *value, /* i; buffer for data */ unsigned long *value_length, /* i/o; buffer size (data length) */ long *return_code /* o; return code */ )
void HTTPD_LINKAGE HTTPD_restart ( long *return_code /* o; return code */ )
注意,您还可以使用此函数创建变量。您创建的变量遵循 HTTP_ 和 PROXY_ 前缀的约定,在变量中描述了这些约定。如果创建一个以 HTTP_ 开头的变量,那么该变量将作为响应中的头发送到客户机,而不会带有 HTTP_ 前缀。例如,要设置 Location 头,请将 HTTPD_set() 与变量名 HTTP_LOCATION 配合使用。使用 PROXY_ 前缀创建的变量将作为请求中的头发送到内容服务器。使用 CGI_ 前缀创建的变量将传递到 CGI 程序。
此函数在所有步骤中都有效;然而,并非所有变量在所有步骤中都有效。
void HTTPD_LINKAGE HTTPD_set ( unsigned char *handle, /* i; handle */ unsigned char *name, /* i; name of value to set */ unsigned long *name_length, /* i; length of the name */ unsigned char *value, /* i; buffer with value */ unsigned long *value_length, /* i; length of value */ long *return_code /* o; return code */ )
long /* o; return code */ HTTPD_LINKAGE httpd_setvar ( unsigned char *handle, /* i; handle */ unsigned char *name, /* i; variable name */ unsigned char *value, /* i; new value */ unsigned long *addHdr /* i; add header or replace it */ )addHdr
参数具有四个可能的值:
在 HTAPI.h 中定义了这些值。
void HTTPD_LINKAGE httpd_variant_insert ( unsigned char *handle, /* i; handle */ unsigned char *URI, /* i; URI of this object */ unsigned char *dimension, /* i; dimension of variation */ unsigned char *variant, /* i; value of the variant */ unsigned char *filename, /* i; file containing the object */ long *return_code /* o; return code */ )
注意:
Mozilla 4.0 (compatible; BatBrowser 94.1.2; Bat OS)
void HTTPD_LINKAGE httpd_variant_lookup ( unsigned char *handle, /* i; handle */ unsigned char *URI, /* URI of this object */ unsigned char *dimension, /* i; dimension of variation */ unsigned char *variant, /* i; value of the variant */ long *return_code); /* o; return code */
如果在首次调用此函数之前未设置内容类型,那么服务器会假定您正在发送 CGI 数据流。
void HTTPD_LINKAGE HTTPD_write ( unsigned char *handle, /* i; handle */ unsigned char *value, /* i; data to send */ unsigned char *value_length, /* i; length of the data */ long *return_code); /* o; return code */
值 | 状态码 | 说明 |
---|---|---|
-1 | HTTPD_UNSUPPORTED | 该函数不受支持。 |
0 | HTTPD_SUCCESS | 该函数已成功,并且输出字段有效。 |
1 | HTTPD_FAILURE | 该函数失败。 |
2 | HTTPD_INTERNAL_ERROR | 遇到内部错误,无法继续处理此请求。 |
3 | HTTPD_PARAMETER_ERROR | 传递了一个或多个无效参数。 |
4 | HTTPD_STATE_CHECK | 该函数在此进程步骤中无效。 |
5 | HTTPD_READ_ONLY | (仅由 HTTPD_set 和 httpd_setvar 返回。)该变量是只读的,无法由插件设置。 |
6 | HTTPD_BUFFER_TOO_SMALL | (仅由 HTTPD_set、httpd_setvar 和 HTTPD_read 返回。)提供的缓冲区太小。 |
7 | HTTPD_AUTHENTICATE_FAILED | (仅由 HTTPD_authenticate 返回。)认证失败。请检查 HTTP_RESPONSE 和 HTTP_REASON 变量,以了解更多信息。 |
8 | HTTPD_EOF | (仅由 HTTPD_read 返回。)指示请求主体已结束。 |
9 | HTTPD_ABORT_REQUEST | 请求已异常中止,因为客户机提供了与该请求所指定的条件不匹配的实体标记。 |
10 | HTTPD_REQUEST_SERVICED | (由 HTTPD_proxy 返回。)调用的函数已完成此请求的响应。 |
11 | HTTPD_RESPONSE_ALREADY_COMPLETED | 函数失败,因为已完成该请求的响应。 |
12 | HTTPD_WRITE_ONLY | 该变量是只写的,无法由插件读取。 |
请求进程中的每个步骤都有一个配置伪指令,可以使用该伪指令来指示您要在该步骤期间调用并执行的插件函数。通过手动编辑并更新服务器的配置文件 (ibmproxy.conf),或者通过使用高速缓存代理“配置”和“管理”表单中的“API 请求处理”表单,可以将这些伪指令添加到该文件。
这意味着服务器以 Service、NameTrans、Exec、Fail、Map、Pass、Proxy、ProxyWAS 和 Redirect 伪指令在配置文件中的顺序来处理这些伪指令。服务器在成功将 URL 映射到文件时,它不会读取或处理这些伪指令中的任何其他伪指令。(Map 伪指令是一个例外。请参阅 WebSphere Application Server 高速缓存代理 Administration Guide,以了解关于代理服务器映射规则的完整信息。)
这些配置文件伪指令必须在 ibmproxy.conf 文件中显示为一行,并且之间没有空格,此处明确指定的那些空格除外。虽然在某些语法示例中出现换行符以便于理解,但在实际的伪指令中那些位置不能有任何空格。
这些伪指令中的变量具有下列含义:
如果您要访问路径信息,那么 Service 伪指令要求函数名后面有一个星号 (*) 。
有关这些伪指令的其他信息(包括语法),请参阅 WebSphere Application Server 高速缓存代理 Administration Guide。