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

13

У меня есть сервер с кучей 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? Есть ли что-то, что я не помню, чтобы искать? Почему это не так просто, как я помнил?

Дэн
источник
1
Я не обижаюсь или еще что, но не могли бы вы объяснить, как вы выбрали лучший ответ на этот вопрос? Ответ, который вы выбрали, ссылался на другой дистрибутив, в то время как мой ответ был точным в отношении Ubuntu. Мог ли я каким-либо образом изменить свой ответ, поскольку вы его не выбрали?
pauska
Оба ваших ответа содержали критическую Listen 192.168.0.82:80строку, которая мне и была нужна. Я выбрал ответ cjc, потому что он углубился в вопрос о том , зачем нужна эта строка. Я подумал, что упоминание комментариев, используемых в версии Apache, которая поставляется в комплекте с CentOS, было хорошим дополнением. Но поскольку все, похоже, в целом согласны с тем, что ответ должен идти к Пауске, я пошел дальше и дал его ему. В конце концов, я заметил, увидев исправления, что комментарий Паушки значительно повлиял на ответ cjc в его нынешнем виде.
Дан

Ответы:

18

Apache связывается со всем по умолчанию, даже если вы указываете определенные IP-адреса для запуска NameVirtualHost.

Добавьте это в ваши ports.conf:

Listen 192.168.0.82:80

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

pauska
источник
16

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

CJC
источник
Httpd.conf пуст в Ubuntu, так как они используют другой стиль конфигурационных файлов (много включений). Также нет никакого «Listen 80», как показал grep из OP.
pauska
1
О верно. Ubuntu. Я обновлю. grepОн делает против: 80 , так что собирался пропустить вещи в любом случае, так как по умолчанию Listen 80.
CJC
1
Этот комментарий CentOS действительно помог бы мне. Глупая Убунту ...
Дэн
0

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

Слушать 192.168.0.82:80

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

Послушайте some_name_in_my_localhost: 80

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

luis.espinal
источник