当给定一个错误的端口号时,httpd会发生什么?

我有一个httpd.conf文件被意外地更改为服务器侦听的端口号变为高于65535的数字。当HTTPD读取此configuration文件时,它会执行什么操作? 它是否回落到港口80?

这取决于configuration。 您可以定义多个端口来侦听,在这种情况下,它将尝试绑定到所有端口。 将应用程序启动视为一个多步骤的过程。 在这个过程中最基本的forms是这样的:

  1. 阅读configuration文件,检查错误
  2. 尝试绑定到指定的端口
  3. 听取连接

如果你给它一个不可用的,但现有的端口,那么httpd将会击中第二步并失败。 应用程序将无法完全启动,并且不会失效到端口80。

在提交非端口的情况下,即文本,负数或高于65535的数字,则configuration将被视为无效,并且httpd将会死亡为1。

一种方法是自己尝试一下,然后使用

  netstat -lptn 

查看httpd正在监听的端口。

如果你设置的端口高于65535,比如说65536,那么会给出一个语法错误,说“无效的地址或端口”。

很大程度上取决于您使用的特定服务器软件。

你会期望软件对非法的端口号发出错误,但事实并非如此; 一些软件会高兴地接受你所交的任何东西,导致很奇怪的行为。

这里的问题是:端口号是一个无符号的16位值(0 – 65535),在某些情况下,应用程序将接受更大的数字,但只使用低16位。 这导致了一个令人困惑的情况,一个启动脚本指定一个90000端口,并且该应用程序被侦听到端口24464(90000 mod 65536 = 24464)

我在2002年2月的SysAdmin杂志上发表了类似的事件: “通过法医操作提高可靠性” ( 复制 )理想情况下,这些事情不应该发生,但是天真的软件和开发者之间不知道底层networking的具体情况合法港口)仍然需要防范这种“不可能”的事件。 我的首选方法是与开发人员合作,以确保他们的代码是ops友好的,但往往运作和发展不是最好的条款。