apache ProxyPass指令详解
ProxyPass [path] !|url [key=value key=value ...]]
该指令允许你将一个远端服务器映射到本地服务器的URL空间中,此时本地服务器并不充当代理角色,而是充当远程服务器的一个镜像。path是一个本地虚拟路径名,url是一个指向远程服务器的部分URL,并且不允许包含查询字符串。
当使用ProxyPass
指令时,ProxyRequests
指令通常应当被设为 off 。假设本地服务器地址是:http://example.com/
,那么,
ProxyPass /mirror/foo/ http://backend.example.com/
将会导致对http://example.com/mirror/foo/bar
的本地请求将会在内部转换为一个代理请求:http://backend.example.com/bar
。
"!
"指令对于您不想对某个子目录进行反向代理时很有用。比如说:
ProxyPass /mirror/foo/i !
ProxyPass /mirror/foo http://backend.example.com
将会代理除/mirror/foo/i
之外的所有对backend.example.com
下/mirror/foo
的请求。
顺序很重要,您需要把拒绝指令放置在普通ProxyPass
指令之前。
As of Apache 2.1, the ability to use pooled connections to a backend server is available. Using the key=value
parameters it is possible to tune this connection pooling. The default for a Hard Maximum
for the number of connections is the number of threads per process in the active MPM. In the Prefork MPM, this is always 1, while with the Worker MPM it is controlled by the ThreadsPerChild
.
Setting min
will determine how many connections will always be open to the backend server. Upto the Soft Maximum or smax
number of connections will be created on demand. Any connections above smax
are subject to a time to live or ttl
. Apache will never create more than the Hard Maximum or max
connections to the backend server.
ProxyPass /example http://backend.example.com smax=5 max=20 ttl=120 retry=300
ThreadsPerChild
. Apache will never create more than the Hard Maximum connections to the backend server.smaxmaxUpto the Soft Maximum number of connections will be created on demand. Any connections above smax
are subject to a time to live or ttl
.ttl-Time To Live for the inactive connections above the smax
connections in seconds. Apache will close all connections that has not been used inside that time period.timeoutTimeout
Connection timeout in seconds. If not set the Apache will wait until the free connection is available. This directive is used for limiting the number of connections to the backend server together with max
parameter.acquire-If set this will be the maximum time to wait for a free connection in the connection pool. If there are no free connections in the pool the Apache will return SERVER_BUSY
status to the client.keepaliveOffThis parameter should be used when you have a firewall between your Apache and the backend server, who tend to drop inactive connections. This flag will tell the Operating System to send KEEP_ALIVE
messages on inactive connections (interval depends on global OS settings, generally 120ms), and thus prevent the firewall to drop the connection. To enable keepalive set this property value to On
.retry60Connection pool worker retry timeout in seconds. If the connection pool worker to the backend server is in the error state, Apache will not forward any requests to that server until the timeout expires. This enables to shut down the backend server for maintenance, and bring it back online later.loadfactor1Worker load factor. Used with BalancerMember. It is a number between 1 and 100 and defines the normalized weighted load applied to the worker.route-Route of the worker when used inside load balancer. The route is a value appended to seesion id.redirect-Redirection Route of the worker. This value is usually set dynamically to enable safe removal of the node from the cluster. If set all requests without session id will be redirected to the BalancerMember that has route parametar equal as this value.If the Proxy directive scheme starts with the balancer://
then a virtual worker that does not really communicate with the backend server will be created. Instead it is responsible for the management of several "real" workers. In that case the special set of parameters can be add to this virtual worker.
byrequests
, to perform weighted request counting or bytraffic
, to perform weighted traffic byte count balancing. Default is byrequests
.stickysession-Balancer sticky session name. The value is usually set to something like JSESSIONID
或PHPSESSIONID
, and it depends on the backend application server that support sessions.nofailoverOffIf set to On
the session will break if the worker is in error state or disabled. Set this value to On if backend servers do not support session replication.timeout0Balancer timeout in seconds. If set this will be the maximum time to wait for a free worker. Default is not to wait.maxattempts1Maximum number of failover attempts before giving up.ProxyPass /special-area http://special.example.com/ smax=5 max=10
ProxyPass / balancer://mycluster stickysession=jsessionid nofailover=On
<Proxy balancer://mycluster>
BalancerMember http://1.2.3.4:8009
BalancerMember http://1.2.3.5:8009 smax=10
# Less powerful server, don't send as many requests there
BalancerMember http://1.2.3.6:8009 smax=1 loadfactor=20
</Proxy>
When used inside a <Location>
section, the first argument is omitted and the local directory is obtained from the <Location>
.
If you require a more flexible reverse-proxy configuration, see the RewriteRule
directive with the [P]
flag.