/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Apache håndtering af CNAME hosts
Fra : Morten


Dato : 06-05-07 14:44


Hej. Hvis man har et site:

<VirtualHost 123.123.123.123>
ServerName dev.foo.com
<Location /repos/>
DAV svn
...
</Location>

</VirtualHost>

<VirtualHost 123.123.123.123>
ServerName www.foo.com
ServerAlias *.foo.com
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

Og man gerne vil tillade at folk kan ramme fex. bar.foo.com via at CNAME
www.barfoo.com -> bar.foo.com, hvad gør man så, hvis dev.foo.com stadig
skal virke (og derfor stå før *.foo.com som virtual host erklæring)?

CNAME requests bliver ikke matchet af nogen server names/aliases, og vil
derfor blive fanget i den første virtual host som Apache loader. En
mulig løsning kan være at lave en falsk "catchall.foo.com" virtual host
erklæring som er identisk med www.foo.com:

<VirtualHost 123.123.123.123>
ServerName catchall.foo.com
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

<VirtualHost 123.123.123.123>
ServerName dev.foo.com
<Location /repos/>
DAV svn
...
</Location>

</VirtualHost>

<VirtualHost 123.123.123.123>
ServerName www.foo.com
ServerAlias *.foo.com
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

Men det er lidt grimt. Nogen bedre måde?

Morten



 
 
Morten K. Lennon (06-05-2007)
Kommentar
Fra : Morten K. Lennon


Dato : 06-05-07 21:37

On 2007-05-06, Morten <useless@useless.useless> wrote:
> Og man gerne vil tillade at folk kan ramme fex. bar.foo.com via at CNAME
> www.barfoo.com -> bar.foo.com, hvad gør man så, hvis dev.foo.com stadig
> skal virke (og derfor stå før *.foo.com som virtual host erklæring)?

Start med at lade være med at blande pære og banener.

CNAME er noget DNS, det er apache egentlig ligeglad med.

Så peg du roligt dine hosts hvorhen de skal.

Lad dit wildcard være tilslut i apache config så plejer det at virke.


--
Morten

Morten (07-05-2007)
Kommentar
Fra : Morten


Dato : 07-05-07 10:48

Morten K. Lennon wrote:
> On 2007-05-06, Morten <useless@useless.useless> wrote:
>> Og man gerne vil tillade at folk kan ramme fex. bar.foo.com via at CNAME
>> www.barfoo.com -> bar.foo.com, hvad gør man så, hvis dev.foo.com stadig
>> skal virke (og derfor stå før *.foo.com som virtual host erklæring)?
>
> Start med at lade være med at blande pære og banener.
>
> CNAME er noget DNS, det er apache egentlig ligeglad med.
>
> Så peg du roligt dine hosts hvorhen de skal.
>
> Lad dit wildcard være tilslut i apache config så plejer det at virke.

Men hvilket wildcard? Problemet er jo, at et request kommer mod en CNAME
host, ikke kan wildcardes. Det skal håndteres af en default host. Mit
spørgsmål er i bund og grund, hvordan man "mest korrekt" sætter apache
default host. Så vidt jeg selv kan vurdere, er det den første
virtualhost som apache indlæser under opstart.

Mvh.

Morten


Morten K. Lennon (07-05-2007)
Kommentar
Fra : Morten K. Lennon


Dato : 07-05-07 11:30

On 2007-05-07, Morten <useless@useless.useless> wrote:
>> Lad dit wildcard være tilslut i apache config så plejer det at virke.
>
> Men hvilket wildcard? Problemet er jo, at et request kommer mod en CNAME
> host, ikke kan wildcardes. Det skal håndteres af en default host. Mit
> spørgsmål er i bund og grund, hvordan man "mest korrekt" sætter apache

Ikke for at være uhøflig men jeg gentager lige..

"Start med at lade være med at blande pære og banener.

CNAME er noget DNS, det er apache egentlig ligeglad med."


Apache får et request, "jeg vil gerne have fat i siten med dette navn".

Apache læser ned om der er et match, og hvis ikke der er et match tages
den defaulte (den første)

Eksempel:
En apache har disse 3 virtuelle hosts sat op

<VirtualHost *>
Servername hest.stortdyr.tld
....
<VirtualHost *>


<VirtualHost *>
Servername kat.lilledyr.tld
....
<VirtualHost *>


<VirtualHost *>
Servername *.lilledyr.tld
....
<VirtualHost *>


Beder browseren om "kat.lilledyr.tld" får man kat.lilledyr.tld,
bedes der om ko.lilledyr.tld får man *.lilledyr.tld, bedes der om
kat.stortdyr.tld får man hest.stortdyr.tld.

(Apache kan så have nogle andre konfigurationer som kan ændre på
ovnestående)


--
Morten

Morten (07-05-2007)
Kommentar
Fra : Morten


Dato : 07-05-07 12:13

Morten K. Lennon wrote:
> On 2007-05-07, Morten <useless@useless.useless> wrote:
>>> Lad dit wildcard være tilslut i apache config så plejer det at virke.
>> Men hvilket wildcard? Problemet er jo, at et request kommer mod en CNAME
>> host, ikke kan wildcardes. Det skal håndteres af en default host. Mit
>> spørgsmål er i bund og grund, hvordan man "mest korrekt" sætter apache
>
> Ikke for at være uhøflig men jeg gentager lige..
>
> "Start med at lade være med at blande pære og banener.

Det gør jeg såmænd heller ikke. Jeg har nok ikke formuleret mit
spørgsmål klart nok.

> Apache får et request, "jeg vil gerne have fat i siten med dette navn".

Så vidt så godt. I mit setup, kender jeg ikke de CNAMEs der er oprettet.
Hvis en bruger mener at han gerne vil have CNAME
abrakadabra.filihankat.com til at pege på et af mine subdomains, fex.
trylleri.foo.com, så er det helt og holdent hans beslutning, og jeg vil
bare gerne give ham muligheden for det.

I den virtualhost der rammes, er der en ProxyPass http://localhost:8080/
således request mod abrakadabra.filihankat.com sendes til applikationen
der lytter på port 8080, som ved hvordan den skal mappe hostnavn
abrakadabra.filihankat.com til netop trylleri.foo.com, og finder dermed
brugerens konto.

> Apache læser ned om der er et match, og hvis ikke der er et match tages
> den defaulte (den første)

Ok. Og derfor ser min løsning nu således ud:

<VirtualHost *>
ServerName catchall.foo.com #Dummy, reqs for CNAMEd hosts go here

ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

<VirtualHost *>
ServerName dev.foo.com #Dev site
</VirtualHost>

<VirtualHost *>
ServerName www.foo.com
ServerAlias *.foo.com

ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

Det virker, men er ikke videre elegant.

Mvh.

Morten


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste