Apache HTTP服务器 2.0版本
相关模块 | 相关指令 |
---|---|
Apache启动时,会绑定本机上的某些地址和端口,并等待请求进入。缺省情况下,它会监听本机的所有地址。但是,要监听指定的地址和端口或者某种组合,尤其是在使用虚拟主机,对不同的IP、主机名和端口作出不同响应时,则必须明确指出。
Listen
指令告诉服务器接受来自指定端口或者地址+端口的请求。如果Listen指令仅指定了端口,服务器会监听所有的地址;如果指定了地址+端口,则服务器只监听来自此地址和端口的请求。多个Listen指令,可以指定多个地址和端口。
例如:使服务器接受来自端口80和8000的请求,可以这样写:
Listen 80
Listen 8000
接受来自两个指定的地址+端口:
Listen 192.170.2.1:80
Listen 192.170.2.5:8000
IPv6 的地址必须用方括号括起来:
Listen [fe80::a00:20ff:fea7:ccea]:80
如今有越来越多的平台支持IPv6, 而APR在大多数平台上也支持IPv6, 使Apache能够获得IPv6套接字,并处理通过IPv6发送的请求。
令Apache管理员疑惑的是IPv6的套接字能否同时处理IPv4和IPv6的连接。 IPv6套接字处理IPv4的连接时使用的是映射到IPv4的IPv6地址, 大多数平台默认是允许的,而在FreeBSD, NetBSD 和OpenBSD上, 为了配合其系统全局策略,默认却是禁用的。但是,即使在这些默认是禁用的平台上, 也可以采用特殊的配置参数为Apache改变这种行为。
要使Apache以最少的套接字处理IPv4 和IPv6 的连接,
需要使用映射到IPv4的IPv6地址,则必须指定配置选项--enable-v4-mapped
,
并使用通用的Listen指令,如下:
Listen 80
有了--enable-v4-mapped
,
Apache产生的默认配置文件中的Listen指令将是这种形式。
除了FreeBSD, NetBSD和OpenBSD,--enable-v4-mapped
是所有平台的默认值。
要使Apache只处理IPv4连接,无论你的平台是什么抑或APR是否支持, 只须对Listen指令指定一个IPv4的地址,即可,如下:
Listen 0.0.0.0:80
Listen 192.170.2.1:80
要使Apache以不同的套接字分别处理IPv4和IPv6的连接(也就是,禁用映射到IPv4的地址),
必须指定配置选项--disable-v4-mapped
,并使用如下特定的Listen指令:
Listen [::]:80
Listen 0.0.0.0:80
有了--disable-v4-mapped
,
Apache产生的默认配置文件中的Listen指令将是这种形式。
对于FreeBSD, NetBSD和OpenBSD,--disable-v4-mapped
是默认值。
Listen指令并不实现虚拟主机,它只是告诉主服务器去监听哪些地址和端口。
如果没有<VirtualHost>
指令,服务器对所有请求一视同仁;
但是如果有<VirtualHost>
,则服务器会作出不同的响应。
要实现虚拟主机,首先必须告诉服务器需要监听的地址和端口,
然后为特定的地址和端口建立一个<VirtualHost>
段。
注意,如果<VirtualHost>
段设置为服务器没有监听的地址和端口,
则此段无效。