У меня есть сервер с кучей IP-адресов, и я хочу, чтобы Apache слушал только один из них. Это не похоже на сложную задачу, и я уже делал это некоторое время назад, но на этот раз у меня возникли некоторые проблемы. Во-первых, вот где я сейчас, насколько я понимаю:
Везде, где 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? Есть что-то, что я не забываю искать? Почему это не так просто, как я помнил?
Apache по умолчанию привязывается ко всему, даже если вы укажете определенные IP-адреса для запуска NameVirtualHost.
Добавьте это в свой файл ports.conf:
Listen 192.168.0.82:80
Посмотрите в /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 будет связываться с интерфейсами, которые он видит.
Используйте следующее в соответствии с Документы Apache:
Слушайте 192.168.0.82:80
В некоторых случаях (не во всех) можно пойти немного дальше и сделать следующее:
Слушайте some_name_in_my_localhost: 80
Таким образом вы сделаете свои конфигурации apache переносимыми в ситуациях, когда у вас есть ферма серверов Apache. У этого есть плюсы и минусы (как и у всего остального).