codecamp

Apache 绑定指定地址与端口

本教程将介绍如何配置Apache以监听指定地址和端口。

当Apache启动时,它会绑定到本地计算机上的某个端口和地址,并等待传入的请求。默认情况下,它会监听计算机上的所有地址。但是,可能需要告知监听特定端口,或仅监听选定地址,或两者的组合。这通常与虚拟主机功能结合使用,后者确定Apache如何响应不同的IP地址,主机名和端口。

Listen指令告诉服务器仅接受指定端口或地址和端口组合的传入请求。如果在Listen指令中仅指定了端口号,则服务器将监听所有接口上的给定端口。如果给出IP地址和端口,服务器将监听给定的端口和接口。可以使用多个Listen指令来指定要监听的多个地址和端口。服务器将响应来自任何列出的地址和端口的请求。

例如,要使服务器接受端口80和端口8000上的连接,请在所有接口上使用:

Listen 80
Listen 8000
Shell

要使服务器接受指定IP端口80和端口8000上的连接,请使用 -

Listen 192.0.2.1:80
Listen 192.0.2.5:8000
Shell

IPv6地址必须用方括号括起来,如下例所示:

Listen [2001:db8::a00:20ff:fea7:ccea]:80
Shell

IPv6注意事项

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

Apache管理员的一个复杂因素是IPv6套接字是否可以同时处理IPv4连接和IPv6连接。使用IPv6套接字处理IPv4连接使用IPv4映射的IPv6地址,这些地址在大多数平台上是默认允许的,但在FreeBSD,NetBSD和OpenBSD上默认是不允许的,以便匹配这些平台上的系统范围策略。在默认情况下不允许它的系统上,指定configure参数可以更改Apache的此行为。

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

--enable-v4-mapped是除FreeBSD,NetBSD和OpenBSD之外的所有平台的默认设置,因此它就是构建Apache的方式。

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

Listen 0.0.0.0:80
Listen 192.0.2.1:80
Shell

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

如何使用虚拟主机

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


Apache 配置web服务器过程
Apache 配置文件
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Apache 下载和安装

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }