配置Apache HTTP Server以侦听特定的地址和端口。
相关模块 | 相关指令 |
---|---|
httpd启动时,它将绑定到本地计算机上的某些端口和地址,并等待传入的请求。默认情况下,它侦听计算机上的所有地址。但是,可能需要告知它侦听特定端口,或仅侦听选定的地址,或者同时侦听两者。这通常与虚拟主机功能结合使用,该
功能确定如何
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
重新启动httpd时,必须特别注意更改Listen
指令。在重新启动过程中,httpd保持端口绑定(如原始配置一样),以避免在任何新尝试连接到服务器时生成“连接被拒绝”错误。如果对所使用的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默认情况下不允许使用这些地址,以匹配这些平台上的系统级策略。在默认情况下不允许使用的系统上,特殊configure
参数可以更改httpd的此行为。
另一方面,在某些平台(例如Linux和Tru64)上,处理IPv6和IPv4 的
唯一方法是使用映射地址。如果要httpd
使用最少的套接字处理IPv4和IPv6连接,而这需要使用IPv4映射的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映射的地址),请指定该--disable-v4-mapped
configure
选项。--disable-v4-mapped
是FreeBSD,NetBSD和OpenBSD的默认设置。
大多数配置都不需要可选的第二协议参数
Listen
。如果未指定,https
则是端口443 http
的默认值,是所有其他端口的默认值。该协议用于确定哪个模块应处理请求,并通过AcceptFilter
指令应用协议特定的优化
。
仅在非标准端口上运行时,才需要设置协议。例如,https
在端口8443上运行站点:
Listen 192.170.2.1:8443 https
该Listen
指令不实现虚拟主机-它仅告诉主服务器要侦听的地址和端口。如果未<VirtualHost>
使用任何
指令,则服务器将对所有接受的请求以相同的方式运行。但是,
<VirtualHost>
可用于为一个或多个地址或端口指定不同的行为。要实现VirtualHost,必须首先告知服务器侦听要使用的地址和端口。然后,<VirtualHost>
应为指定的地址和端口创建一个
部分,以设置此虚拟主机的行为。请注意,如果
<VirtualHost>
为服务器未侦听的地址和端口设置了,则无法访问它。