我有一台带有一堆 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
答案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
答案4
按照以下方式使用Apache 文档:
监听 192.168.0.82:80
在某些情况下(并非全部),可以更进一步这样做:
监听 some_name_in_my_localhost:80
这样,当您拥有 Apache 服务器群时,您的 Apache 配置就可以移植。这样做有优点也有缺点(就像其他所有事情一样)。