Apache 学习笔记 - 绑定到地址和端口

http://httpd.apache.org/docs/2.4/en/bind.html
这里写图片描述

概要

当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

重复的Listen指令将导致致命错误,从而阻止服务器启动。
(48)Address already in use: make_sock: could not bind to address [::]:80

在重启时更改监听配置

当httpd重新启动时,必须特别考虑对Listen指令的更改。 在重新启动期间,httpd会保持端口绑定(如原始配置),以避免任何新的尝试连接到服务器时出现”Connection refused”错误。 如果对与旧配置冲突的一组Listen指令进行更改,则配置将失败,服务器将终止。

例如,原始配置:
Listen 127.0.0.1:80

更改为以下配置,配置会失败,因为将80端口绑定到所有地址上与将80端口绑定在127.0.0.1有冲突。
Listen 80

为了使配置生效,先关闭服务器,然后再启动服务是非常有必要的。

特殊的IPv6注意事项

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

httpd管理员的一个复杂因素是IPv6套接字是否可以处理IPv4连接和IPv6连接。 使用IPv6套接字处理IPv4连接使用IPv4映射的IPv6地址,默认情况下,这些地址在大多数平台上都是允许的,但在FreeBSD,NetBSD和OpenBSD上, 为了匹配这些平台上的系统范围策略,默认情况下不允许使用,以匹配这些平台上的系统范围策略。 在默认情况下不允许使用的系统上,一个特殊的配置参数可以改变httpd的这种行为。

在另一方面,在有些平台,例如Tru64和Linux ,处理IPv6 和IPv4的唯一方法是地址映射(mapped addresses)。如果您希望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的默认设置。

监听指定的协议

监听的第一个可选配置参数通常是不需要的。如果没有指定,https是端口443的默认协议,http是所有其他端口的默认协议。协议被用于觉得哪一个模块来处理请求,并且可以通过使用 AcceptFilter来指定特定的协议。

如果您在非标准端口上运行,则只需设置协议。 例如,在端口8443上运行https站点
Listen 192.170.2.1:8443 https

它如何与虚拟主机协同工作

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值