Назад | Перейти на главную страницу

Ограничьте Apache одним IP

У меня есть сервер с кучей 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

Ссылка: http://httpd.apache.org/docs/2.2/bind.html

Посмотрите в /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 будет связываться с интерфейсами, которые он видит.

Директива Listen - это то, что вы ищете:

Listen 192.168.0.82:80

Больше информации в документация.

Используйте следующее в соответствии с Документы Apache:

Слушайте 192.168.0.82:80

В некоторых случаях (не во всех) можно пойти немного дальше и сделать следующее:

Слушайте some_name_in_my_localhost: 80

Таким образом вы сделаете свои конфигурации apache переносимыми в ситуациях, когда у вас есть ферма серверов Apache. У этого есть плюсы и минусы (как и у всего остального).