Apache HTTP Server 版本 2.4
相关模块 | 相关指令 |
---|---|
当 httpd 启动时,它会绑定到本地机器上的某个端口和地址,并等待传入请求。默认情况下,它会监听机器上的所有地址。但是,可能需要告诉它监听特定端口,或者只监听选定的地址,或者两者结合。这通常与 虚拟主机 功能结合使用,该功能确定 httpd
如何响应不同的 IP 地址、主机名和端口。
指令告诉服务器只接受指定端口或地址和端口组合上的传入请求。如果在 Listen
指令中只指定了端口号,则服务器会监听所有接口上的给定端口。如果还给出了 IP 地址和端口,则服务器将在给定端口和接口上监听。可以使用多个 Listen
指令来指定要监听的多个地址和端口。服务器将响应来自任何列出地址和端口的请求。Listen
例如,要使服务器接受所有接口上端口 80 和端口 8000 上的连接,请使用
Listen 80 Listen 8000
要使服务器接受一个接口上的端口 80 和另一个接口上的端口 8000 上的连接,请使用
Listen 192.0.2.1:80 Listen 192.0.2.5:8000
IPv6 地址必须用方括号括起来,如下例所示
Listen [2001:db8::a00:20ff:fea7:ccea]:80
当 httpd 重启时,必须对
指令的更改进行特殊考虑。在重启期间,httpd 会保持端口绑定(如原始配置中),以避免对尝试连接到服务器的任何新尝试产生“连接被拒绝”错误。如果对使用的 Listen
指令集进行了更改,并且与旧配置冲突,则配置将失败,服务器将终止。Listen
例如,从配置
Listen 127.0.0.1:80
更改为以下配置可能会失败,因为绑定到所有地址上的端口 80 与仅绑定到 127.0.0.1 上的端口 80 冲突。
Listen 80
要使此类配置更改生效,必须停止然后启动服务器。
越来越多的平台实现了 IPv6,并且 APR 在大多数这些平台上支持 IPv6,允许 httpd 分配 IPv6 套接字,并处理通过 IPv6 发送的请求。
httpd 管理员面临的一个复杂因素是 IPv6 套接字是否可以同时处理 IPv4 连接和 IPv6 连接。使用 IPv6 套接字处理 IPv4 连接使用 IPv4 映射的 IPv6 地址,这些地址在大多数平台上默认允许,但在 FreeBSD、NetBSD 和 OpenBSD 上默认不允许,以匹配这些平台上的系统范围策略。在默认情况下不允许的系统上,可以使用特殊的
参数更改 httpd 的此行为。configure
另一方面,在某些平台(如 Linux 和 Tru64)上,唯一处理 IPv6 和 IPv4 的方法是使用映射地址。如果您希望 httpd
使用最少的套接字处理 IPv4 和 IPv6 连接,这需要使用 IPv4 映射的 IPv6 地址,请指定 --enable-v4-mapped
选项。configure
--enable-v4-mapped
是除 FreeBSD、NetBSD 和 OpenBSD 之外的所有平台上的默认值,因此这可能是您的 httpd 的构建方式。
如果您希望 httpd 仅处理 IPv4 连接,而不管您的平台和 APR 将支持什么,请在所有
指令上指定 IPv4 地址,如下例所示Listen
Listen 0.0.0.0:80 Listen 192.0.2.1:80
如果您的平台支持,并且您希望 httpd 在单独的套接字上处理 IPv4 和 IPv6 连接(即禁用 IPv4 映射地址),请指定 --disable-v4-mapped
选项。configure
--disable-v4-mapped
是 FreeBSD、NetBSD 和 OpenBSD 上的默认值。
的可选第二个 protocol 参数对于大多数配置来说不是必需的。如果未指定,则端口 443 的默认值为 Listen
https
,所有其他端口的默认值为 http
。协议用于确定哪个模块应该处理请求,并使用
指令应用特定于协议的优化。AcceptFilter
只有在非标准端口上运行时,才需要设置协议。例如,在端口 8443 上运行 https
站点
Listen 192.170.2.1:8443 https
指令不实现虚拟主机 - 它只告诉主服务器要监听哪些地址和端口。如果未使用 Listen
指令,则服务器将对所有接受的请求以相同的方式运行。但是,<VirtualHost>
可用于为一个或多个地址或端口指定不同的行为。要实现虚拟主机,服务器必须首先被告知监听要使用的地址和端口。然后,应为指定的地址和端口创建一个 <VirtualHost>
部分,以设置此虚拟主机的行为。请注意,如果 <VirtualHost>
设置为服务器未监听的地址和端口,则无法访问它。<VirtualHost>