Next Previous Contents

8. Virtuell Web

8.1 Å Kjøre Med Virtuald

Ikke Anbefalt

Apache har deres egen støtte for virtuelle domener. Dette er det eneste programmet jeg anbefaler å bruke ved bruken av den interne virtuelle domene mekanismen. Når du kjører noe gjennom inetd har det en kostnad. Programmet må starte hver gang du kjører det. Dette resulterer i lavere responstid, noe som er helt kurant for de fleste tjenester, men er helt uakseptabelt for Web tjenester. Apache har også en mekanisme for å stoppe oppkoblinger når for mange kommer inn, noe som kan bli kritisk for tilogmed medium siter.

Gjort kort; å virtualisere Apache med virtuald er en generellt dårlig ide. Hele poenget ved virtuald er å fylle hullet når tjenester IKKE har deres egen interne mekanisme for å få jobben gjort. Virtuald er ikke ment å erstatte god kode som allerede løser oppgaven.

Her er likevel oppskriften på å gjøre dette, for de som er vågende nok:

Inetd

Editer /etc/inetd.conf:

vi /etc/inetd.conf # Add this line
www stream tcp nowait www /usr/local/bin/virtuald \
        virtuald /virtual/conf.www httpd -f /var/www/conf/httpd.conf

Httpd.conf

Editer /var/www/conf/httpd.conf:

vi /var/www/conf/httpd.conf # Or wherever you put the Apache config files
Det skal stå:
ServerType standalone

Erstatt med:
ServerType inetd

Konfigurasjon

Deretter konfigurer hver Apache server slik som du vanligvis ville gjort for enslige domener.

Httpd.init

En httpd.init fil trengs ikke siden serveren kjører gjennom inetd istedet.

8.2 Å Bruke Apache VirtualHost

Apache har tre konfigurasjonsfiler: access.conf , httpd.conf og srm.conf . Nyere versjoner av Apache har gjort de tre konfigurasjonsfilene unødvendig. Men likevel, jeg mener at å bryte opp konfigurasjonen i tre seksjoner gjør det enklere å administrere, så jeg vil bruke den stilen i dette HOWTO dokumentet.

Access.conf

Denne konfigurasjonsfilen er brukt til å kontrollere tilgangen til kataloger i Web katalogstrukturen. Her er et eksempel på en access.conf konfigurasjonsfil som viser hvordan du kan ha forskjellige alternativer for hvert domene:

# /var/www/conf/access.conf: Global access configuration

# Options are inherited from the parent directory
# Set the main directory with default options
<Directory />
AllowOverride None
Options Indexes
</Directory>

# Give one domain a passwd protected directory
<Directory /virtual/domain1.com/var/www/html/priv>
AuthUserFile /var/www/passwd/domain1.com-priv
AuthGroupFile /var/www/passwd/domain1.com-priv-g
AuthName PRIVSECTION
AuthType Basic
<Limit GET PUT POST>
require valid-user
</Limit>
</Directory>

# Give another domain Server Side Includes
<Directory /virtual/domain2.com/var/www/html>
Options IncludesNOEXEC
</Directory>

Httpd.conf

Denne konfigurasjonen blir brukt til å kontrollere hovedalternativene for Apache serveren. Her er en eksempelkonfigurasjonsfil som viser hvordan du kan ha forskjellige alternativer for hvert domene.

# /var/www/conf/httpd.conf: Main server configuration file

# Begin: main conf section

# Needed since not using inetd
ServerType standalone

# Port to run on
Port 80

# Log clients with names vs IP addresses
HostnameLookups on

# User to run server as
User www
Group www

# Where server config, error and log files are
ServerRoot /var/www

# Process Id of server in this file
PidFile /var/run/httpd.pid

# Internal server process info
ScoreBoardFile /var/www/logs/apache_status

# Timeout and KeepAlive options
Timeout 400
KeepAlive 5
KeepAliveTimeout 15

# Number of servers to run
MinSpareServers 5
MaxSpareServers 10
StartServers 5
MaxClients 150
MaxRequestsPerChild 30

# End: main conf section

# Begin: virtual host section

# Tell server to accept requests for ip:port
# I have one for each IP needed so you can explicitly ignore certain domains
Listen 10.10.10.129:80
Listen 10.10.10.130:80

# VirtualHost directive allows you to specify another virtual
# domain on your server.  Most Apache options can be specified
# within this section.
<VirtualHost www.domain1.com>

# Mail to this address on errors
ServerAdmin webmaster@domain1.com

# Where documents are kept in the virtual domain
DocumentRoot /virtual/domain1.com/var/www/html

# Name of the server
ServerName www.domain1.com

# Log files Relative to ServerRoot option
ErrorLog logs/domain1.com-error_log
TransferLog logs/domain1.com-access_log
RefererLog logs/domain1.com-referer_log
AgentLog logs/domain1.com-agent_log

# Use CGI scripts in this domain
ScriptAlias /cgi-bin/ /var/www/cgi-bin/domain1.com/
AddHandler cgi-script .cgi
AddHandler cgi-script .pl
</VirtualHost>

<VirtualHost www.domain2.com>

# Mail to this address on errors
ServerAdmin webmaster@domain2.com

# Where documents are kept in the virtual domain
DocumentRoot /virtual/domain2.com/var/www/html

# Name of the server
ServerName www.domain2.com

# Log files Relative to ServerRoot option
ErrorLog logs/domain2.com-error_log
TransferLog logs/domain2.com-access_log
RefererLog logs/domain2.com-referer_log
AgentLog logs/domain2.com-agent_log

# No CGI's for this host
</VirtualHost>
# End: virtual host section

Srm.conf

Denne konfigurasjonsfilen er brukt til å kontrollere hvordan requests blir håndtert og hvordan resultatene blir formatert. Du trenger ikke editere noenting her for de virtuelle domenene. Eksempelkonfigurasjonsfilen fra Apache burde virke.

Httpd.init

Ingenting spesielt må gjøres med httpd.init filen. Bruk en standard httpd.init som følger med Apache serveren.

8.3 Filbeskriver Overflod (Overflow)

Advarsel

Dette har kun med den alenestående Apache serveren å gjøre. En server som kjører gjennom inetd blander seg ikke oppi andre domener, så den har hele Filbeskriver tabellen.

Alle logfilene som Apache server åpner er en annen filbeskriver for prosessen. Det er en begrensning på 256 filbeskrivelser per prosess i Linux. Siden du har flere enn ett domene, bruker du mange flere filbeskrivelser. Hvis du har for mange domener som kjører på en Apache server prosess, kan du flomme over denne tabellen. Dette betyr at noen logger ikke vil fungere, og CGI'er vil feile.

Flere Apache Servere

Hvis du går utifra fem filbeskrivelser per domene, kan du ha 50 domener kjørende på din Apache server uten problemer. Men hvis det viser seg at serveren likevel har problemer, burde du lage /var/www1 med en Apache server ansvarlig for domain1 til domain25 og /var/www2 med en Apache server ansvarlig for domain26 til domain50 og så videre. Dette vil gi hver server deres egen konfigurasjon, feil og log katalog. Hver server må bli konfigurert med deres egen Listen og VirtualHost direktiver. Ikke glem å kjøre flere servere i din httpd.init fil.

8.4 Dele Servere Med En IP

Spare IP'er

HTTP (HyperText Transfer Protocol) versjon 1.1 la til en opsjon som kommuniserer servernavnet til klienten. Dette betyr at klienten ikke trenger å slå opp serveren fra dens IP adresse. Derfor, to virtuelle servere kunne ha den samme IP adressen men likevel være forskjellige Web sites. Apache konfigurasjonen er den samme som over, bortsett fra at du trenger ikke å putte inn et forskjellig Listen direktiv siden to domener vil ha den samme IP'en.

Ulemper

Det eneste problemet er det at virtuald bruker IP adresser til å se forskjell på domener. I dets nåværende form, ville ikke virtuald vært i stand til å chroot til forskjellige spool kataloger for hvert domene. Mail ville derfor bare vært i stand til å svare som en IP og det ville ikke lengre vært en unik spool katalog for hvert domene. Alle IP'ene som deler Web måtte finne seg i å dele den IP'ens spool katalog. Dette ville bety at to brukernavn som var like ville blitt et problem igjen. Men det er prisen du må betale for å dele IP'er.

8.5 Mer Informasjon

Denne HOWTO'en viser bare hvordan man implementerer virtuell støtte på Apache Web server. De fleste Web servere bruker et tilnærmet likt brukergrensesnitt. For mer informasjon om virtuell hosting, se WWW HOWTO, dokumentasjonen for Apache på Apache's Site, eller dokumentasjonen hos ApacheWeek.


Next Previous Contents