将 Apache 限制为单个 IP

将 Apache 限制为单个 IP

我有一台带有一堆 IP 地址的服务器,我只希望 Apache 监听其中一个 IP 地址。这听起来不难,我之前也做过一次,但这次我遇到了一些麻烦。首先,据我所知,这是我现在的情况:

Apache 监听端口 80 的每个地方都只监听正确的 IP。

/etc/apache2$ grep -R ":80" .
./sites-available/default:<VirtualHost 192.168.0.82:80>
./httpd.conf:<VirtualHost 192.168.0.82:80>
./ports.conf:NameVirtualHost 192.168.0.82:80
./sites-enabled/000-default:<VirtualHost 192.168.0.82:80>

没有提到在 0.0.0.0 上进行监听。

/etc/apache2$ grep -R "0\.0\.0\.0" .

然而...Apache 拒绝启动。

/etc/apache2$ sudo /etc/init.d/apache2 start
 * Starting web server apache2
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
                                                                         [fail]

如果有人问起,我并不受该地址的约束:

/etc/apache2$ sudo netstat -nap | grep :80
tcp        0      0 192.168.0.83:80       0.0.0.0:*        LISTEN      2822/node

错误日志/var/log/apache2/error.log仅显示:

[Wed Aug 08 03:30:18 2012] [notice] caught SIGTERM, shutting down

我是否遗漏了 Apache 配置中的某个地方?是否有我忘记要查找的内容?为什么这不像我记得的那么简单?

答案1

Apache 默认绑定到所有内容,即使您指定特定的 IP 来运行 NameVirtualHost。

在您的 ports.conf 中添加此内容:

Listen 192.168.0.82:80

参考:http://httpd.apache.org/docs/2.2/bind.html

答案2

查看/etc/apache2/ports.conf文件。

你会发现类似这样的指令:

Listen 80

CentOS 框上的评论描述了此选项:

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, in addition to the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
#
#Listen 12.34.56.78:80

根据所需内容,将该Listen 80行更改为Listen 192.168.0.82:80

您现在无法启动 Apache,因为它正尝试绑定到所有接口上的端口 80(0.0.0.0 指定),并且您正在node监听 192.168.0.83:80。

虚拟主机块中的 IP 表示特定虚拟主机将响应来自该 IP 地址的请求。它不指定 Apache 将如何绑定到它看到的接口。

答案3

聆听指令就是您正在寻找的:

Listen 192.168.0.82:80

更多信息文档

答案4

按照以下方式使用Apache 文档

监听 192.168.0.82:80

在某些情况下(并非全部),可以更进一步这样做:

监听 some_name_in_my_localhost:80

这样,当您拥有 Apache 服务器群时,您的 Apache 配置就可以移植。这样做有优点也有缺点(就像其他所有事情一样)。

相关内容