Limitar o Apache a um único IP

13

Eu tenho um servidor com vários endereços IP e só quero o Apache ouvindo em um deles. Não parece algo difícil de fazer, e já fiz isso antes, mas há alguns problemas desta vez. Primeiro, aqui é onde estou agora, para meu entendimento:

Em todo lugar que o Apache está ouvindo a porta 80, está ouvindo apenas no IP correto.

/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>

Não há menção de ouvir no 0.0.0.0.

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

E ainda ... O Apache se recusa a começar.

/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]

Caso alguém pergunte, eu não estou vinculado a esse endereço:

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

O log de erros em /var/log/apache2/error.logapenas diz:

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

Perdi um lugar na configuração do Apache? Existe algo que não me lembro de procurar? Por que isso não é tão simples quanto eu lembrava?

Dan
fonte
1
Não estou ofendido nem nada, mas você poderia explicar como selecionou a melhor resposta para esta pergunta? A resposta que você selecionou foi fazer referência a outra distribuição, enquanto minha resposta foi direta no que diz respeito ao Ubuntu. Eu poderia ter diferenciado minha resposta de alguma maneira, já que você não a selecionou?
pauska
Ambas as suas respostas continham a Listen 192.168.0.82:80linha crítica , que é o que eu precisava. Selecionei a resposta do cjc porque ela se aprofundou um pouco mais no motivo pelo qual essa linha era necessária. Eu pensei que mencionar os comentários usados ​​na versão do Apache que vem com o CentOS foi uma boa adição. Mas como todo mundo parece concordar que a resposta deve ser pauska, eu fui adiante e dei a ele. Afinal, percebo olhando as revisões que o comentário de pauska influenciou significativamente a resposta do cjc em sua forma atual.
Dan

Respostas:

18

O Apache liga-se a tudo por padrão, mesmo se você especificar determinados IPs para executar o NameVirtualHost.

Adicione isso no seu ports.conf:

Listen 192.168.0.82:80

Referência: http://httpd.apache.org/docs/2.2/bind.html

pauska
fonte
16

Olhe no /etc/apache2/ports.confarquivo.

Você encontrará uma diretiva como:

Listen 80

O comentário nas caixas do CentOS descreve esta opção:

#
# 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

Para o que você deseja, altere a Listen 80linha para Listen 192.168.0.82:80.

Você não pode iniciar o Apache agora porque está tentando se conectar à porta 80 em todas as interfaces (a designação 0.0.0.0) e está nodeouvindo 192.168.0.83:80.

O IP nos blocos do host virtual significa que esse host virtual específico responderá às solicitações que chegam nesse endereço IP. Ele não especifica como o Apache se ligará às interfaces que vê.

cjc
fonte
O httpd.conf está em branco no Ubuntu, pois eles usam um estilo diferente de arquivos de configuração (muitas inclusões). Também não há "Listen 80", como mostraram os grep do OP.
pauska
1
Oh, certo. Ubuntu. Eu vou atualizar. O que grepele estava fazendo era contra: 80, de modo que perderia as coisas de qualquer maneira, como o padrão é Listen 80.
CJC
1
Esse comentário do CentOS realmente teria me ajudado. Parva Ubuntu ...
Dan
2

A diretiva Listen é o que você está procurando:

Listen 192.168.0.82:80

Mais informações na documentação .

stderr
fonte
0

Use o seguinte conforme os documentos do Apache :

Listen 192.168.0.82:80

Em algumas circunstâncias (não todas), pode-se ir um pouco mais longe e fazer o seguinte:

Ouça some_name_in_my_localhost: 80

Dessa forma, você torna suas configurações do apache portáteis em situações em que você tem um farm de servidores Apache. Existem prós e contras nisso (como em todo o resto).

luis.espinal
fonte