Apache non rispetta la direttiva ServerName per un determinato sito


9

Ho alcuni siti configurati come VirtualHosts che usano Apache che hanno funzionato bene per un po '. Recentemente ho cambiato il nome host del server in uno dei nomi di dominio che venivano offerti, e l'ho anche aggiunto a / etc / hosts che punta all'indirizzo IP esterno del server.

Da quando l'ho fatto, l'accesso al dominio dal mio laptop mi porta all'impostazione predefinita di Apache "Funziona!" pagina. Se rimuovo 000-default da / etc / apache2 / sites-enabled /, verrà visualizzato il sito corretto. Cercando di accedere al sito con "www". il prefisso mi porta al sito corretto indipendentemente dal fatto che 000-default sia abilitato per i siti.

Sulla base di tutto ciò, immagino che la configurazione predefinita stia offrendo la pagina predefinita a causa di come ho configurato il nome host o / etc / hosts (o entrambi), ma non riesco a capire come disabilitarlo mentre lasciando quelle impostazioni così come sono. Eventuali suggerimenti sono benvenuti!

Modifica - La mia attuale configurazione di VirtualHost è simile alla seguente:

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin me@domain.com

    DocumentRoot /srv/www/domain

    ErrorLog /srv/www/domain/logs/error.log
    CustomLog /srv/www/domain/logs/access.log combined
</VirtualHost>

Riassumendo: ho installato diversi VirtualHosts, e questo è l'unico che non funziona correttamente. Posso accedere a http://www.domain.com bene, ma http://domain.com mi porta all'impostazione predefinita di Apache "Funziona!" pagina. Se disabilito la configurazione predefinita di 000, mostra la pagina corretta. Ciò è iniziato solo dopo aver impostato il nome host del server su domain.com e aggiunto una riga a / etc / hosts che punta domain.com all'indirizzo IP esterno del server. Vorrei lasciarli così se possibile.

Modifica: ho corso da apache2ctl -Squando /usr/sbin/apache2 -Smi ha dato "apache2: nome utente errato $ {APACHE_RUN_USER}". Ecco l'output:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost other.com (/etc/apache2/sites-enabled/other:1)
         port 80 namevhost another.com (/etc/apache2/sites-enabled/another:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/domain:1)
Syntax OK

domain.com viene utilizzato sul file httpd.conf principale come ServerName? o apache2ctl.conf sembra che tu stia usando Ubuntu, quindi potrebbe differire il nome.
Prix

Risposte:


12

Ho perso questa domanda l'altro giorno.

Quando si dispone di un contenitore <VirtualHost> senza un componente ServerName, verrà utilizzato il nome host predefinito. Poiché 000-default probabilmente non ha un componente ServerName, ed è il primo in ordine alfabetico da includere, ecco perché risponde per hostname.com e non consente al tuo nome host dichiarato esplicitamente di funzionare.


Vedo, un modo per risolverlo? Voglio che la configurazione predefinita gestisca tutti i domini non gestiti, ma non voglio che gestisca quel particolare dominio.
John Debs,

assegnagli un dominio diverso da quello utilizzato in una configurazione o rinominalo in zzz-default in modo che venga chiamato per ultimo.
karmawhore,

Ok, penso di aver capito tutto ora. Ho provato zzz-default ma non è il comportamento esatto che volevo. L'impostazione ServerName example.comnella configurazione predefinita funziona benissimo, però. Grazie!
John Debs,

4

Hai una direttiva NameVirtualHost *: 80 da qualche parte?

Provare:

/usr/sbin/apache2 -S

Questo ti dirà come Apache sta analizzando il file di configurazione. Hai configurazioni che hanno IP reali o tutte hanno il *? Ti manca qualcosa: 80? Ad Apache non piace mescolare quelli.

Hai un ServerName domain.com o ServerAlias ​​domain.com per impostazione predefinita?


Sì, ce l'ho nel mio /etc/apache2/posts.conf. Aggiungerò un riassunto alla domanda che si spera lo renda più chiaro.
John Debs,

La mia configurazione predefinita di 000 non è toccata, non ha direttive ServerName o ServerAlias.
John Debs,

NameVirtualHost è obsoleto.
Sam,


0

Questo ha funzionato:

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerAlias www.mydomain.com
</VirtualHost>

quando ho avuto un refuso, NON ha funzionato (la direttiva ServerName due volte):

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerName www.mydomain.com
</VirtualHost>

Quando ho avuto la direttiva ServerName due volte, ha continuato a risolversi nel primo sito elencato (non mostrato qui).

spero che questo aiuti qualcuno ...


0

Ho avuto un problema simile e l'ho risolto impostando esplicitamente un ServerName nel file httpd.conf principale, invece di lasciare che apache lo scoprisse automaticamente. Suppongo che ciò che Apache ha deciso fosse lo stesso del mio vhost (definito in seguito), quindi quello predefinito "ha vinto", sovrascrivendo l'impostazione del vhost.

Ho appena impostato httpd.conf ServerName su un nome host che la macchina ha, non servirò mai pagine web.

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.