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:
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
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
Deretter konfigurer hver Apache server slik som du vanligvis ville gjort for enslige domener.
En httpd.init fil trengs ikke siden serveren kjører gjennom inetd istedet.
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.
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>
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
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.
Ingenting spesielt må gjøres med httpd.init filen. Bruk en standard httpd.init som følger med Apache serveren.
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.
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.
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.
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.
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.