绑定到地址和端口

配置 Apache HTTP Server 以侦听特定的地址和端口。

Overview

Related Modules Related Directives
core
mpm_common
<VirtualHost>
Listen

httpd 启动时,它将绑定到本地计算机上的某些端口和地址,并 await 传入的请求。默认情况下,它侦听计算机上的所有地址。但是,可能需要告知它侦听特定端口,或者仅侦听选定的地址,或者同时侦听两者。这通常与Virtual Host功能结合使用,该功能确定httpd如何响应不同的 IP 地址,主机名和端口。

Listen指令告诉服务器仅在指定的端口或地址和端口组合上接受传入的请求。如果仅在Listen指令中指定了端口号,则服务器将侦听所有接口上的给定端口。如果提供了 IP 地址和端口,则服务器将侦听给定的端口和接口。可以使用多个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

Warning

Listen指令重叠将导致致命错误,这将阻止服务器启动。

(48)Address already in use: make_sock: could not bind to address [::]:80

有关进一步的疑难解答提示,请参见Wiki 中的讨论

重新启动时更改监听配置

重新启动 httpd 时,必须特别注意对Listen伪指令的更改。在重新启动过程中,httpd 保持端口绑定(与原始配置一样),以避免在任何新尝试连接到服务器时产生“连接被拒绝”错误。如果对使用的Listen伪指令集进行了更改,这些伪指令与旧的配置冲突,则配置将失败并且服务器将终止。

例如,从配置更改:

Listen 127.0.0.1:80

以下内容可能会失败,因为跨所有地址绑定到端口 80 与仅绑定 127.0.0.1 上的端口 80 会发生冲突。

Listen 80

要使这样的配置更改生效,必须先停止然后再启动服务器。

IPv6 特殊注意事项

越来越多的平台实现 IPv6,APR在这些平台中的大多数平台上都支持 IPv6,从而允许 httpd 分配 IPv6 套接字,并处理通过 IPv6 发送的请求。

对于 httpd Management 员来说,一个复杂的因素是 IPv6 套接字是否可以同时处理 IPv4 连接和 IPv6 连接。使用 IPv6 套接字处理 IPv4 连接时,会使用 IPv4 Map 的 IPv6 地址,大多数平台默认情况下允许使用,但 FreeBSD,NetBSD 和 OpenBSD 默认情况下不允许使用 IPv6 地址,以匹配这些平台上的系统级策略。在默认情况下不允许使用的系统上,特殊的configure参数可以更改 httpd 的此行为。

另一方面,在某些平台上,例如 Linux 和 Tru64,处理 IPv6 和 IPv4 的“唯一”方法是使用 Map 地址。如果您希望httpd使用最少的套接字来处理 IPv4 和 IPv6 连接,而这需要使用 IPv4 Map 的 IPv6 地址,请指定--enable-v4-mapped configure选项。

--enable-v4-mapped是 FreeBSD,NetBSD 和 OpenBSD 以外的所有平台上的默认设置,因此,这可能是 httpd 的构建方式。

如果您希望 httpd 仅处理 IPv4 连接,无论您的平台和 APR 支持什么形式,请在所有Listen指令上指定一个 IPv4 地址,如以下示例所示:

Listen 0.0.0.0:80
Listen 192.0.2.1:80

如果您的平台支持它,并且您希望 httpd 在单独的套接字上处理 IPv4 和 IPv6 连接(即,禁用 IPv4 Map 的地址),请指定--disable-v4-mapped configure选项。 --disable-v4-mapped是 FreeBSD,NetBSD 和 OpenBSD 的默认设置。

使用“监听”指定协议

对于大多数配置,不需要可选的第二协议参数Listen。如果未指定,则https是端口 443 的默认值,http是所有其他端口的默认值。该协议用于确定哪个模块应处理请求,并通过AcceptFilter指令应用协议特定的优化。

仅在非标准端口上运行时,才需要设置协议。例如,在端口 8443 上运行一个https网站:

Listen 192.170.2.1:8443 https

如何与虚拟主机一起使用

Listen指令不实现虚拟主机-它仅告诉主服务器要侦听的地址和端口。如果不使用<VirtualHost>指令,则服务器对于所有接受的请求将以相同的方式运行。但是,<VirtualHost>可用于为一个或多个地址或端口指定不同的行为。要实现 VirtualHost,必须首先告知服务器监听要使用的地址和端口。然后,应为指定的地址和端口创建一个<VirtualHost>部分,以设置此虚拟主机的行为。请注意,如果将<VirtualHost>设置为服务器未监听的地址和端口,则无法访问它。

首页