mboost-dp1

Kombinering af IP og domæne baserede virtualhosts i apache


Gå til bund
Gravatar #1 - kasperd
12. nov. 2012 22:05
Jeg spekulerer over om der er en måde at opnå følgende i apache.

Jeg har en server med tre IP adresser:
192.0.2.42
2001:db8::abe
2001:db8::6b:61:74

Jeg har to domæner:
example.com peger på 192.0.2.42 og 2001:db8::abe
example.net peger på 192.0.2.42 og 2001:db8::6b:61:74

Jeg vil nu gerne sætte to virtualhosts op.

Første virtualhost skal behandle alle requests til 2001:db8::abe og alle requests til example.com på 192.0.2.42

Anden virtualhost skal behandle alle requests til 2001:db8::6b:61:74 og alle requests til example.net på 192.0.2.42

Min første tanke var at gøre noget i retning af:
<VirtualHost [2001:db8::abe] _default_>
ServerName example.com
...
</VirtualHost>
<VirtualHost [2001:db8::6b:61:74] _default_>
ServerName example.org
...
</VirtualHost>
Men så vidt jeg kan gennemskue vil det ikke virke fordi requests til f.eks. 2001:db8::abe uden passende host header ikke bliver matchet af den ønskede virtualhost.

Er der nogen som har et bud på hvordan jeg opnår det ønskede resultat? Målet er at hvis IP adressen matcher en virtual host, så vælges den rigtige virtual host fra IP adressen. Og ellers vælges den udfra host headeren.
Gravatar #2 - kasperd
12. nov. 2012 22:24
Jeg kiggede lidt på eksemplerne og tænker at det måske vil virke, hvis jeg tilføjer NameVirtualHost 192.0.2.42 i starten af ovenstående konfiguration. Kan man mon skrive NameVirtualHost _default_?
Gravatar #3 - kasperd
15. nov. 2012 18:53
kasperd (2) skrev:
Kan man mon skrive NameVirtualHost _default_?
Det kan man ikke.

Tilsyneladende er man nødt til at skrive hele listen af IP adresser, man vil bruge til navne baserede virtual hosts, i både NameVirtual host direktiver og igen i hver eneste virtualhost definition.

Det er lidt upraktisk, men jeg fik det da til at virke.

Det tog et par forsøg at få det til at virke. Det viste sig at wildcards i ServerAlias ikke virker sådan som den dokumentation jeg kiggede på sagde. Dokumentationen sagde jeg kunne bruge * til at matche en vilkårlig streng, ? til at matche et vilkårligt tegn og [] til at matche en bestemt mængde af tegn. Både * og ? virkede som dokumentationen sagde, men [] kunne ikke bruges.

Da jeg undersøgte logfilerne, for at se om alt virkede efter hensigten, så så jeg følgende mærkelige linjer i access_log
199.66.132.97 - - [15/Nov/2012:15:32:58 +0100] "GET / HTTP/1.1" 200 5045 "-" "Java/1.6.0_31" "www.netiter.dk" "-"
199.66.132.97 - - [15/Nov/2012:15:32:59 +0100] "GET /EASYv6 HTTP/1.1" 200 5211 "-" "Java/1.6.0_31" "www.netiter.dk" "-"
199.66.132.97 - - [15/Nov/2012:15:32:59 +0100] "GET /EASYv6/EASYv6 HTTP/1.1" 200 5158 "-" "Java/1.6.0_31" "www.netiter.dk" "-"
199.66.132.97 - - [15/Nov/2012:15:32:59 +0100] "GET /EASYv6/EASYv6/EASYv6 HTTP/1.1" 200 5158 "-" "Java/1.6.0_31" "www.netiter.dk" "-"
199.66.132.97 - - [15/Nov/2012:15:32:59 +0100] "GET /EASYv6/EASYv6/EASYv6/EASYv6 HTTP/1.1" 200 5158 "-" "Java/1.6.0_31" "www.netiter.dk" "-"
199.66.132.97 - - [15/Nov/2012:15:32:59 +0100] "GET /EASYv6/EASYv6/EASYv6/EASYv6/EASYv6 HTTP/1.1" 200 5158 "-" "Java/1.6.0_31" "www.netiter.dk" "-"
199.66.132.97 - - [15/Nov/2012:15:33:00 +0100] "GET /EASYv6/EASYv6/EASYv6/EASYv6/EASYv6/EASYv6 HTTP/1.1" 200 5158 "-" "Java/1.6.0_31" "www.netiter.dk" "-"
Er det mig der har gjort noget galt? Eller er det klienten, der er fejl på?

Umiddelbart vil jeg sige at det må være klienten, som ikke kan finde ud af relative links. Til gengæld synes jeg det er lidt upraktisk at php som default tillader at der kan sættes ekstra komponenter efter scriptets navn. På den måde kan relative links jo blive evalueret ud fra en anden base end forventet.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login