Limitare Apache a un singolo IP


13

Ho un server con un sacco di indirizzi IP e voglio che Apache ascolti solo uno di essi. Non sembra una cosa difficile da fare, e l'ho già fatto una volta, ma questa volta ho dei problemi. Prima di tutto, ecco dove sono ora, per la mia comprensione:

Ogni posto in cui Apache sta ascoltando la porta 80, sta ascoltando solo sull'IP corretto.

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

Non si parla dell'ascolto su 0.0.0.0.

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

Eppure ... Apache si rifiuta di iniziare.

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

Nel caso qualcuno lo chieda, non sono vincolato a quell'indirizzo:

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

Il registro degli errori su /var/log/apache2/error.logdice solo:

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

Ho perso un posto nella configurazione di Apache? C'è qualcosa che non ricordo di cercare? Perché non è così semplice come me lo ricordavo?


1
Non sono offeso o altro, ma potresti spiegare come hai selezionato la risposta migliore a questa domanda? La risposta che hai selezionato si riferiva a un'altra distro, mentre la mia risposta era precisa per quanto riguarda Ubuntu. Avrei potuto rendere la mia risposta diversa in qualche modo da quando non l'hai selezionata?
pauska,

Entrambe le tue risposte contenevano la Listen 192.168.0.82:80linea critica , che è ciò di cui avevo bisogno. Ho scelto la risposta di cjc perché è andata un po 'più in profondità sul perché quella linea fosse necessaria. Ho pensato che menzionare i commenti usati nella versione di Apache fornita con CentOS fosse una bella aggiunta. Ma dato che tutti sembrano concordare sul fatto che la risposta dovrebbe andare a Pauska, sono andato avanti e gliel'ho dato. Dopotutto, noto osservando le revisioni che il commento di Pauska ha influenzato significativamente la risposta di CJC nella sua forma attuale.
Dan,

Risposte:



16

Guarda nel /etc/apache2/ports.conffile.

Troverai una direttiva come:

Listen 80

Il commento sulle caselle CentOS descrive questa opzione:

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

Per quello che vuoi, cambia la Listen 80linea in Listen 192.168.0.82:80.

Non puoi avviare Apache in questo momento perché sta tentando di collegarsi alla porta 80 su tutte le interfacce (la designazione 0.0.0.0) e hai nodeascoltato 192.168.0.83:80.

L'IP nei blocchi host virtuali significa che quel particolare host virtuale risponderà alle richieste che arrivano su quell'indirizzo IP. Non specifica come Apache si legherà alle interfacce che vede.


Httpd.conf è vuoto su Ubuntu, poiché usano uno stile diverso di file di configurazione (molti include). Non c'è neanche "Listen 80", come ha mostrato il grep dell'OP.
pauska,

1
Oh giusto. Ubuntu. Aggiornerò. Quello grepche stava facendo era contrario: 80 quindi avrebbe perso comunque le cose, come impostazione predefinita Listen 80.
cjc

1
Quel commento di CentOS mi avrebbe davvero aiutato. Ubuntu sciocca ...
Dan

2

Ascolta la direttiva è quello che stai cercando:

Listen 192.168.0.82:80

Maggiori informazioni nella documentazione .


0

Utilizzare quanto segue secondo i documenti Apache :

Ascolta 192.168.0.82:80

In alcune circostanze (non tutte), si potrebbe andare un po 'oltre e fare questo:

Ascolta some_name_in_my_localhost: 80

In questo modo rendi le tue configurazioni apache portatili in situazioni in cui hai una server farm Apache. Ci sono pro e contro a questo (proprio come con tutto il resto.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.