Apache non-IP Virtual Hosts

Zdenek Havelka zdenekh na pvt.net
Čtvrtek Říjen 31 08:03:04 CET 1996


Radek Kanovsky wrote:

> Ujistete se, ze Vas www browser posila informaci, na ktery www server
> se chce pripojit. Tuto informaci Apache ulozi do promenne HTTP_HOST.
> Podle ni se rozhodne, na ktery "document root" pujde". Tuto informaci
> posilaji pouze novejsi verze Netscapu a Exploderu. Ani Mosaic ani Lynx
> ji neposilaji. O jinych nevim.


Zkousel jsem tyto klienty:

MSIE for Win95 version 2.0 (4.40.516) - neumi
MS IE for Win95 version 3.0 (4.70.1155) - umi
Lynx verze 2.5 - umi
NCSA Mosaic v 2.1.1 (Win95) - neumi
Netscape 1.2 (unix) - neumi
Netscape 2.02 (win95) -umi


Ostatni si kazdy muze otestovat sam.
Upravil jsem si na to stand. script, ktery se distribuuje jako priklad v
distribuci Perlu pro NT. 

Vypada asi takhle:

#!/usr/bin/perl

use POSIX "sys_wait_h";

$port = 8081;
$sockaddr = 'S n a4 x8';
$AF_INET = 2;
$SOCK_STREAM = 1;

($name,$aliases,$proto) = getprotobyname('tcp');
$this = pack($sockaddr,$AF_INET,$port,"\0\0\0\0");

select(NS); $| = 1; select(stdout);
socket(S,$AF_INET,$SOCK_STREAM,$proto);
bind(S,$this) || die "bind: $!";
listen(S,5) || die "listen: $!";
select(S); $| = 1; select(stdout);


@Potomci = ();
for($con = 1; ; $con++){
        print "Listening for connection no. ",$con,"...\n";
        ($addr = accept(NS,S)) || die $!;
        if (($child = fork()) == 0){
                print "Accept ok\n";
                ($af,$port,$inetaddr) = unpack($sockaddr,$addr);
                @inetaddr = unpack('C4',$inetaddr);
                print "Con: $con, Af: $af, Port: $port, Addr:
@inetaddr\n";
                while($x=<NS>){
                        tr/a-z/A-Z/;
                        print "$x";
                        }
                close(NS);
                exit;
                }
        else{
                close(NS);
                while(waitpid(-1,&WNOHANG)) {}
                }
        }


a po spusteni posloucha na portu 8081 a prichozi hlasky vypisuje na
obrazovku.

Po spusteni staci zadat browseru jako URL http://localhost:8081/ a
pockat, co se objevi na obrazovce terminalu, kde byl spusten script.
Po precteni prerusit nejprve natahovani dokumentu v browseru a pak
ukoncit script (CTRL+C).

Pokud klient virtual host umi, obsahuje jeho dotaz polozku host:

Napr. NTSC 3.0

> GET / HTTP/1.0
> Connection: Keep-Alive
> User-Agent: Mozilla/3.0Gold (X11; I; Linux 2.0.18 i586)
> Host: localhost:8081 --- !!! to je to, o co kraci.
> Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*



-- 
Zdenek Havelka                           E-mail: zdenekh na pvt.net


Další informace o konferenci Linux