Apache 模块 mod_proxy_http

Description:mod_proxy的 HTTP 支持模块
Status:Extension
Module Identifier:proxy_http_module
Source File:mod_proxy_http.c

Summary

该模块需要 mod_proxy的服务。它提供了用于代理 HTTP 和 HTTPS 请求的功能。 mod_proxy_http支持 HTTP/0.9,HTTP/1.0 和 HTTP/1.1. 它不提供任何缓存功能。如果要设置缓存代理,则可能要使用mod_cache模块的附加服务。

因此,为了获得处理 HTTP 代理请求的能力,服务器中必须存在mod_proxymod_proxy_http

Warning

在拥有保护您的服务器之前,不要启用代理。开放式代理服务器对您的网络和整个 Internet 都是危险的。

Environment Variables

除了控制mod_proxy行为的配置指令外,还有许多环境变量可控制 HTTP 协议提供程序。设置为任何值时,将启用以下未指定特定值的环境变量。

  • proxy-sendextracrlf

    • 使代理在请求结束时发送额外的 CR-LF 换行符。对于某些浏览器中的错误,这是一种解决方法。
  • force-proxy-request-1.0

    • 强制代理将请求作为 HTTP/1.0 发送到后端,并禁用 HTTP/1.1 功能。
  • proxy-nokeepalive

    • 在每个请求之后强制代理关闭后端连接。
  • proxy-chain-auth

    • 如果代理需要身份验证,它将读取并使用 Client 端发送的代理身份验证凭据。使用 proxy-chain-auth,它将还将将凭证转发到链中的下一个代理。如果您有共享身份验证信息的代理链,则可能有必要。 安全警告: 除非您知道您需要它,否则不要进行设置,因为它会转发敏感信息!
  • proxy-sendcl

    • HTTP/1.0 要求所有包含正文的 HTTP 请求(例如 POST 请求)都必须包含 Content-Length Headers。此环境变量强制 Apache 代理将此 Headers 发送到后端服务器,而不管 Client 端发送到代理的内容如何。它确保代理 HTTP/1.0 或未知后端时的兼容性。但是,它可能要求整个请求都由代理缓冲,因此对于大请求而言,效率非常低下。
  • 代理发送分块或代理发送分块

    • 这与 proxy-sendcl 相反。它允许使用分块传输编码将请求正文发送到后端。这样可以有效地传输请求,但是要求后端服务器支持 HTTP/1.1.
  • proxy-interim-response

    • 此变量采用值RFC(默认值)或Suppress。早期的 httpd 版本会抑制后端发送的 HTTP 临时(1xx)响应。从技术上讲,这是对 HTTP 协议的违反。在实践中,如果后端发送临时响应,则它本身可能以我们一无所知的方式扩展了协议,或者只是被破坏了。因此,这现在是可配置的:将proxy-interim-response RFC设置为完全符合协议,或者将proxy-interim-response Suppress设置为抑制临时响应。
  • proxy-initial-not-pooled

    • 如果设置了此变量,则如果 Client 端请求是前端连接上的初始请求,则不会重用任何池化连接。这避免了由于竞争情况引起的“代理:从远程服务器读取状态行错误”错误消息,该竞争情况是在代理检查连接之后,在代理发送的数据到达后端之前,后端服务器关闭了池化连接。必须记住,设置此变量会降低性能,特别是对于 HTTP/1.0 Client 端。

Request notes

mod_proxy_http使用LogFormatErrorLogFormat%{VARNAME}n格式创建以下记录请求日志:

  • proxy-source-port

    • 用于连接到后端服务器的本地端口。
  • proxy-status

    • 从后端服务器收到的 HTTP 状态。