Apache2 non funziona sulla porta tcp IPv4


23

Ho bisogno di eseguire Apache2 sul mio server Debian 7. Ma funziona solo sulla porta tcpv6, non sulla porta tcpv4. L'ho installato con apt-get install. Se vado a localhost o 127.0.0.1 o l'indirizzo IPv4 del mio server, non viene visualizzato alcun sito Web.

Il mio /etc/apache2/ports.conf:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
 # If you add NameVirtualHost *:443 here, you will also have to change
 # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
 # to <VirtualHost *:443>
 # Server Name Indication for SSL named virtual hosts is currently not
 # supported by MSIE on Windows XP.
 Listen 443
</IfModule>

<IfModule mod_gnutls.c>
 Listen 443
</IfModule>

netstat -plntu:

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3558/sshd       
tcp        0      0 0.0.0.0:3466            0.0.0.0:*               LISTEN      2820/mysqld     
tcp6       0      0 :::80                   :::*                    LISTEN      2097/apache2    
tcp6       0      0 :::22                   :::*                    LISTEN      3558/sshd       

3
Prova a cambiare Listen 80in Listen 0.0.0.0:80. Per ulteriori informazioni, consultare la documentazione httpd.apache.org/docs/2.2/bind.html .
pradeepchhetri,

@pradeepchhetri Grazie. Funziona. Posso accedere al mio indirizzo del server da qualsiasi computer e mostrare il contenuto (indirizzo IP / some.php), ma non accedo a some.php da questo server. Ho provato localhost, 127.0.0.1 e IP esterno: numero di porta che funziona da altri PC ... Ma non funziona.
Mato,

1
Puoi pubblicare l'output di sudo iptables -nvLe sudo sestatus? Penso che tu abbia un firewall locale che sta impedendo.
pradeepchhetri,

@Mato devi chiarire, quando mostra contenuti ma non funziona, vuoi dire che mostra il tuo PHP grezzo invece di eseguirlo? In tal caso, è necessario abilitare il modulo PHP. Penso che a2enmod php5dovrebbe farlo per te.
robbat2,

3
Le macchine Linux in genere nascondono un socket IPv4 + IPv6 dualstack dietro l'ascolto sull'indirizzo IPv6 ::.
Pavel Šimerda,

Risposte:


32

Il fatto che netstat mostri solo tcp6 qui non è il problema. Se non specifichi un indirizzo su cui ascoltare, apache ascolterà tutte le famiglie di indirizzi supportate usando un singolo socket (per motivi di progettazione, sshd usa un socket univoco per indirizzo e famiglia di indirizzi, mostrandosi quindi due volte nell'output di netstat).

Ecco uno dei miei sistemi, che mostra apache che ha solo socket tcp6 e funziona ancora bene sia tramite IPv4 che IPv6.

woodpecker ~ # netstat -anp |grep apache
tcp6       0      0 :::80    :::*       LISTEN      1637/apache2        
tcp6       0      0 :::443   :::*       LISTEN      1637/apache2        
woodpecker ~ # wget http://127.0.0.1/ -O /dev/null
--2013-12-25 08:52:38--  http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45 [text/html]
...
# wget http://[::1]/ -O /dev/null
--2013-12-25 08:53:00--  http://[::1]/
Connecting to [::1]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45 [text/html]
...

Se corri wget http://127.0.0.1/ -O -sul server cosa succede? Si collega correttamente? Restituisce il codice HTML non elaborato per il tuo sito Web come previsto?


grazie, ora funziona, ma ho ancora solo un piccolo problema. Ne ho scritto sopra.
Mato,

Sai la cosa folle è che questa è sempre stata la mia esperienza. Naturalmente. Come programmatore di rete conosco bene INADDR_ANYe IN6ADDR_ANY_INIT. Ma oggi ho visto un comportamento davvero strano. Nessuna modifica del firewall, nessuna modifica di Apache, ma in qualche modo gli host remoti possono connettersi solo tramite IPv6, il che è un problema per coloro che ancora non hanno IPv6. È certamente qualcosa che risolverò, ma hai assolutamente ragione (anche se l'invocazione che dai non è applicabile nel mio caso, sfortunatamente).
Pryftan,


1
  1. 127.0.0.1 è locale solo per una macchina, devi essere sul server stesso in un browser per usare l'indirizzo / loopback di loopback locale;

  2. Potresti avere un firewall che blocca le porte;

  3. Assicurati che apache sia in esecuzione e funzioni correttamente, controlla i log degli errori;

  4. Ricontrolla tutte le tue configurazioni di Apache;

  5. Stai ospitando dal root www o dalla directory public_html dell'utente?

  6. Ricontrolla il proprietario e le autorizzazioni.


Quasi l'anno 2019 (benvenuto nel futuro):

  • Di default la maggior parte del mondo usa ipv6 e, se fallisce, ricade su ipv4;

  • Ora abbiamo tunnel ipv4 su ipv6 e viceversa;

  • La maggior parte dei sistemi operativi, dei programmi, dei client e dei server lo fanno per lo più ora;

  • Benvenuti nel mondo senza più NAT e dovendo dipendere ora da firewall / filtri direttamente sul dispositivo;

  • Consiglierei di provare a mantenere tutti i tuoi sistemi dual stack, supportando contemporaneamente sia ipv4 che ipv6, quindi quando si verifica l'interruttore magico, sei ancora attivo e funzionante. Il mio sistema operativo, la mia rete e persino il mio ISP sono dual stack end-to-end. Potrei disattivare completamente ipv4 se volessi, ma cosa c'è là fuori che potrebbe non funzionare più se non esistono tunnel di ritorno su ipv6 da ipv4.


Ero in pericolo di darti un +1 o meno - dato che hai usato la parola "cartella". Ma l'idea di non disabilitare IPv6 è così importante, così come assicurarsi che il firewall sia configurato correttamente per IPv6. So che molte persone pensano che NAT sia sicurezza, ma al massimo è un'illusione (è anche un problema per molti servizi). Quello e gli altri tuoi punti sono tutti validi quindi avere un +1.
Pryftan,

Mi dispiace intendevo directory :-P
cdmlb

Bene, per questo ti darei un altro +1 se potessi. Sono piuttosto sorpreso e anche umiliato che lo cambieresti. Sono un purista, penso che tutto ciò che posso dire. Mi confonde e mi irrita che una certa compagnia lo aveva corretto e poi lo ha cambiato in "cartella". Beh, forse è per renderlo più "amichevole" per le persone, ma poi sembra essere stato accettato come la parola giusta per gli altri che dovrebbero conoscere meglio. Non lo so. Comunque la tua intera lista è qualcosa che vorrei davvero che più persone avrebbero capito! Purtroppo molti non ...
Pryftan il

-1

*

wget http://127.0.0.1/ -O / dev / null

* rappresenta la connessione al server locale senza gestire IPv4 o IPv6, se si modifica localhost (o 127.0.0.1) nell'indirizzo IP reale IPv4 di questo server, non si può scommettere nulla perché si nega la connessione.

Prova a descrivere il tuo IP nei file di configurazione: NameVirtualHost: 80 Ascolta: 80

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.