Viimeksi päivitetty: 21.9.2016
Kirjoittaja: Rackspace Support
Useimmat ihmiset palvelevat pilvipalvelimellaan useampaa kuin yhtä verkkotunnusta. Varaatpa eri toimialueita tai saman toimialueen eri aliverkkotunnuksia, menettely on sama. Tässä artikkelissa kuvataan, kuinka luodaan virtuaalisia isäntiä palvelemaan useita toimialueita ja miten Apachen nimipohjaisten virtuaaliisäntäkokoonpanojen ongelmat ratkaistaan.
Kun selain lähettää palvelimesi IP-osoitteeseen pyynnön, jossa pyydetään verkkotunnuksesi (esimerkiksi https://esimerkkiverkkotunnus.com) sisältöä, verkkosi palvelin tarjoaa HTTP-esityksen sivustostasi. Jos palvelin palvelee vain yhtä verkkosivustoa, se palvelee /var/www/html-hakemistossasi olevaa HTML-koodia alkaen indeksistä.html. Mutta ainutlaatuinen palvelin jokaiselle verkkosivustolle, jota haluat palvella, on kallista ja resurssien tehotonta käyttöä.
Nimipohjaisten virtuaalipalvelinten avulla voit tarjota sisältöä useille verkkosivustoille yhdeltä palvelimelta.
Yksi ensimmäisistä riveistä missä tahansa virtuaalisen isännän määritystiedostossa määrittää verkkotunnuksen nimen, joka liittyy virtuaaliseen isäntään. Seuraavassa on esimerkki virtuaaliisäntämäärityksestä Apachelle, joka palvelee domain1.com:ia:
ServerNamedomain1.comServerAlias www.domain1.comSeuraava esimerkki näyttää virtuaalisen isäntäkokoonpanon NGINX:lle:
palvelin {palvelimen_nimiwww.domain1.com;kirjoita uudelleen ^/(.\*) https://domain1.com/$1 pysyvä;Jokainen kokoonpano alkaa hieman eri tavalla, mutta sama periaate pätee: kyseinen virtuaalinen isäntä vastaa kyselyihin domain1.com ja www.domain1.com.
Jos haluat tarjota erilaista sisältöä eri verkkotunnuksille, lisää toinen virtuaalinen isäntä.
Sinulla on esimerkiksi aliverkkotunnus blogi.domain1.com, joka palvelee blogia.
Luo ensin public_html-kansioosi kansio, jossa on blogiin liittyvät tiedostot (esimerkiksi WordPress-asennus).
Sitten luot virtuaalisen isännän, jonka palvelimen_nimi tai palvelimennimi on määritetty nimellä blog.domain1.com, ja määrität sen osoittamaan julkisen_html-kansiossasi olevia blogitiedostoja ja kansioita.
Lisätietoja virtuaalisännistä saat Apache-dokumentista Name-base Virtual Hosts
Tässä osiossa kerrotaan, kuinka Apache-nimipohjaisten virtuaaliisäntäkokoonpanojen ongelmat voidaan ratkaista. Se tarjoaa hyödyllisiä komentoja virtuaalisen isännän kokoonpanon testaamiseen, kuvaa niiden tulosten tulkitsemista ja kuvailee, kuinka ne auttavat korjaamaan yleisiä virtuaalisen isännän kokoonpanoongelmia.
Käynnistä Apache uudelleenEnnen kuin voit diagnosoida ongelman, varmista, että olet käynnistänyt Apachen uudelleen sen jälkeen, kun viimeksi teit muutoksia Apache-määritystiedostoihisi:
Käytä Red Hat -jakeluissa:
sudo /usr/sbin/httpd -k restartDebian-jakeluissa käytä:
sudo /usr/sbin/apache2 -k restartJos Apache antaa varoituksen tai virheilmoituksen, merkitse se muistiin myöhempää käyttöä varten. Seuraava vaihe on saada tietoja virtuaalisen isännän määrityksistä.
Hanki määritysraporttiSuorita -S-komento verkkopalvelimella tarkistaaksesi virtuaalisen isännän määritykset
Käytä Red Hatista johdetuissa jakeluissa:
sudo /usr/sbin/httpd -SDebian-pohjaisissa jakeluissa käytä:
sudo /usr/sbin/apache2 -STuloste näyttää virtuaalisen isännän asetukset asetustiedostosta. Seuraava esimerkki näyttää kokoonpanoraportin palvelimelle, joka on määritetty kahdella nimipohjaisella virtuaalipalvelimella: vh1.example.com ja vh2.example.com. Numeroidut rivit selitetään esimerkin mukaisesti.
VirtualHost configuration:wildcard NameVirtualHosts ja \_default\_ palvelimet:[1] \*:80on NameVirtualHost[2] oletuspalvelin vh1.example.com (/etc/httpd/conf/custom/virtualhost.conf:3)[3] portti 80 namevhost vh1.example.com (/etc/httpd/conf/custom/virtualhost.conf:3)[4] portti 80 namevhost vh2.example.com (/etc/httpd/conf/custom/virtualhost.conf:8 )[5] Syntaksi OKRivi [1] ilmoittaa, että verkkopalvelin kuuntelee oletusporttia 80 kaikkia IP-osoitteita, joita Apache kuuntelee, ja että nimipohjainen virtuaalinen hosting on päällä. * on yleismerkki, joka määrittää kaikki IP-osoitteet.
Rivi [2] ilmoittaa oletusarvoisen virtuaalisen isännän, jonka verkkopalvelin ServerAlias antaa kaikille pyynnöille, joille ei pyydetä erityistä isäntänimeä. Se näyttää myös polun asetustiedostoon ja rivinumeron, jossa tämä kokoonpano on asetettu.
Rivi [3] ilmoittaa ensimmäisen löydetyn virtuaalisen isäntäkokoonpanon portin ja nimen, tiedoston, jossa se on määritetty, ja rivinumeron, josta sen määritykset alkavat.
Rivi [4] ilmoittaa portin ja toisen löydetyn näennäisisäntäkokoonpanon nimen, tiedoston, jossa se on määritetty, ja rivinumeron, josta sen määritykset alkavat.
Rivi [5] ilmoittaa, onko määrityssyntaksi oikea, vaikka se ei välttämättä tarkoita, että sivustosi toimii
Seuraava tulos on tuotettu seuraavalla virtuaalisen isäntätiedoston määrityksellä:
NameVirtualHost \*:80 Ottaa käyttöön nimipohjaisen isäntäresoluution ja sitoo virtuaalipalvelimen IP-osoitteisiin ja portteihin kuten yllä [1]. \* on yleismerkki, joka määrittää kaikki IP-osoitteet. Konfiguroi ensimmäisen ja oletusarvoisen virtuaalisen isännän [2] & [3] edellä. Se on oletusarvo, koska se on ensimmäinen virtuaalinen isäntä, jonka IP ja portti vastaavat sitä edeltävässä NameVirtualHost-direktiivissä olevia.ServerName vh1.example.comDocumentRoot /var/www/vhosts/vh1 Konfiguroi toisen virtuaalisen isännän yllä olevassa kohdassa [4].PalvelimenNimi vh2.example.comDocumentRoot /var/www/vhosts/vh2Nyt kun olet nähnyt virtuaalisen isännän peruskokoonpanon ulkoasun ja kuinka se liittyy Apachen omaan määritysraporttiin, voit käyttää näitä raportteja yleisimpiin määritysongelmiin. . Seuraavissa osissa kuvataan joitakin näistä ongelmista ja annetaan ohjeita niiden korjaamiseen.
Isäntiä ei ole määritetty nimipohjaisiksi virtuaalisänniksiJos httpd -S on käynnissä, se ilmoittaa seuraavan varoituksen:
[Ke 18. toukokuuta 15:24:51 2011] [varoita] \_default\_ VirtualHost päällekkäisyys portissa 80, ensimmäisellä on etusijaVirtualHost-kokoonpano: jokerimerkki NameVirtualHosts ja \_default\_ palvelimet:\*:80 vh1.example. etc/httpd/conf/custom/virtualhost.conf:3)\*:80 vh2.example.com (/etc/httpd/conf/custom/virtualhost.conf:8)Syntaksi OKTämä varoitus osoittaa, että useita virtuaalisia isännät yrittävät käyttää samaa "socketia" ilman, että niitä on määritetty nimipohjaisiksi virtuaalisänniksi. Tämä virhe ilmenee usein, kun Apache-virtuaalipalvelimet luodaan ensimmäisen kerran, koska oletusarvoinen NameVirtualHost-direktiivi on kommentoitu hash-symbolilla. Tämä symboli kehottaa Apachea jättämään direktiivin huomiotta.
Korjaa tämä ongelma Apachen oletusmääritystiedostossa varmistamalla, että NameVirtualHost *:80 -direktiiviä ei ole kommentoitu. Jos käytät minimaalista Apache-määritystiedostoa, lisää NameVirtualHost *:80 -ohje yksittäisten virtuaaliisäntäkokoonpanojen yläpuolelle.
Seuraava esimerkki näyttää kommentoidun ohjeen, joka aiheutti virheen:
#NameVirtualHost \*:80PalvelimenNimi vh1.example.comDocumentRoot /var/www/vhosts/vh1ServerName vh2.example.comDocumentRoot /var/www/vhosts/vh2Elementti puuttuu VirtualHost-direktiivistä seuraava httpd-virhesanomaS:
Syntaksivirhe /etc/httpd/conf/custom/virtualhost.conf rivillä 8: direktiivi vaatii lisäargumenttejaTämä viesti tarkoittaa, että virtuaalisen isännän VirtualHost-käskystä puuttuu tarvittava elementti. VirtualHost-direktiivi on jokaisen yksittäisen virtuaalisen isäntäkokoonpanon ensimmäinen rivi. Tässä tapauksessa virhe on määritystiedoston /etc/httpd/conf/custom/virtualhost.conf rivillä 8.
Seuraava on Apache-kokoonpano, joka aiheutti yllä olevan virheen:
NameVirtualHost \*:80ServerName vh1.example.comDocumentRoot /var/www/vhosts/vh1ServerName vh2.example.comDocumentRoot /var/www/vhosts/vh2Huomaa, että toisessa VirtualHost-direktiivissä ei ole IP-osoitetta tai porttia virheen syy.
Seuraava on korjattu versio edellisestä esimerkistä, johon on lisätty \*:80 virtuaalisen isännän käskyyn. Kuten aina, \* on jokerimerkki, joka määrittää kaikki IP-osoitteet.
NameVirtualHost \*:80PalvelimenNimi vh1.example.comDocumentRoot /var/www/vhosts/vh1ServerName vh2.example.comDocumentRoot /var/www/vhosts/vh2Portin numerot eivät täsmääJos käynnissä on httpd -S, on listattu yllä, on NameVirtualHost-rivi:
VirtualHost configuration:wildcard NameVirtualHosts ja \_default\_ servers:\*:800vh2.example.com (/etc/httpd/conf/custom/virtualhost.conf:8)\*:80 on NameVirtualHost-oletuspalvelin vh1.example. /etc/httpd/conf/custom/virtualhost.conf:3)portti 80 namevhost vh1.example.com (/etc/httpd/conf/custom/virtualhost.conf:3)Syntaksi OKTässä esimerkissä kokoonpano testi raportoi vh2.example.com-kokoonpanon ennen kuin se raportoi NameVirtualHost-määrityksen. Saatat nähdä tämän virheen, jos VirtualHostin IP-osoite tai portti ei vastaa verkkopalvelimen NameVirtualHost-direktiivin IP-osoitetta tai porttia. Tässä esimerkissä raportti osoittaa, että vh2.example.com käyttää porttia 800 portin 80 sijaan. Portin numero kirjoitettiin väärin, kun vh2.example.com-virtuaaliisännän kuunteluportti määritettiin. Tämän seurauksena Apache käsittelee vh2.example.com-osoitetta erillisenä porttipohjaisena virtuaalipalvelimena.
httpd -S -testikomento ei varoita tästä ongelmasta, koska on sallittua määrittää virtuaaliset isännät käyttämään mitä tahansa porttia, kuten 800, ilman, että ne ovat osa saman palvelimen nimipohjaista virtuaaliisäntäkokoonpanoa.
Jos kohtaat tämän virheen, näet todennäköisesti sisältöä virtuaalisesta oletuspalvelimesta (tässä esimerkissä vh1.example.com), kun yrität tarkastella sivustoa verkkoselaimellasi.
Jotta voit yhdistää edellisen lähdön määritystiedostoon, on seuraava virtuaalisen isännän kokoonpano, joka loi tämän virheen:
NameVirtualHost \*:80ServerName vh1.example.comDocumentRoot /var/www/vhosts/vh1ServerName vh2.example.comDocumentRoot /var/www/vhosts/vh2Dokumentin juurihakemistoa ei ole olemassaJos seuraava http -:S -virhe on käynnissä
Varoitus: DocumentRoot [/etc/httpd/var/www/vhosts/vh2] ei ole olemassaTämä virhe osoittaa, että virtuaalipalvelimen vh2.example.com verkkosivustotiedostot sisältäväksi määritettyä hakemistoa ei ole olemassa tai että Apache ei voi käyttää sitä. Samanlaisia virheitä voi esiintyä missä tahansa virtuaaliisäntäkokoonpanossa määritetyissä tiedostopoluissa, kuten poluissa virtuaalisen isännän lokitiedostoihin.
Korjaa tämä virhe varmistamalla, että olet luonut hakemiston. Jos loit sen, varmista, että DocumentRoot-direktiivissä ei ole virheitä. Yleinen virhe on jättää polun alkuviiva (/) pois. Vinoviivan jättäminen pois ohjeistaa Apachea lukemaan polun – tässä tapauksessa DocumentRoot-polun – suhteellisena poluna, toisin sanoen poluna suhteessa Apachen pääkokoonpanon ServerRoot-polkuun.
Seuraava esimerkki näyttää vain yhden tavoista, joilla tämä virhe luodaan. DocumentRoot-direktiivin polku ensimmäisessä virtuaalipalvelimessa alkaa kauttaviivalla, mutta toisessa ei.
Palvelimenjuuri /etc/httpdNameVirtualHost \*:80PalvelimenNimi vh1.example.comDocumentRoot /var/www/vhosts/vh1PalvelimenNimi vh2.example.comDocumentRoot var/www/vhosts/vh2Käyttämällä virtuaalisen isäntäkokoonpanon määritystiedostoja tarkistatpA> ja httpd -S -komento ei ilmoita ongelmia, yritä päästä sivustollesi käyttämällä cURL-osoitetta:curl -I www.example.comTulosteen pitäisi näyttää suunnilleen tältä:
HTTP/1.1 200 OKPäivämäärä: la, 07. toukokuuta 2011 15:09:50 GMTS-palvelin: Apache/2.2.3 (CentOS) Viimeksi muokattu: ma, 25. huhtikuuta 2011 11:07:43 GMTETag: "2c32e-7c3c7c7c3b -Vuoteet: tavua Sisällön pituus: 119 Sisältötyyppi: teksti/html; charset=UTF-8Ensimmäinen rivi näyttää tilakoodin. Haluat nähdä 200 OK, kuten esimerkissä näkyy. Jos näet tämän, testaa verkkopalvelinta selaimellasi, mutta ota huomioon, että selaimesi saattaa näyttää välimuistissa olevan sivun.
Jos et näe 200 OK, saatat nähdä jonkin seuraavista yleisistä viesteistä:
curl: (6) Isäntää vh1.example.com ei voitu ratkaista
Jos cURL ilmoittaa, että se ei löydä isäntää, varmista, että verkkotunnuksella on A-tietue, joka osoittaa palvelimesi oikeaan IP-osoitteeseen. Voit käyttää kaivaa tähän:
dig vh1.example.comcurl: (7) ei voinut muodostaa yhteyttä isäntään
Varmista, että Apache-määritystiedostosi sisältävät tarvittavat kuuntelukäskyt ja että niitä ei ole kommentoitu. Se vaatii vähintään Listen 80:n.
Toinen tapa varmistaa tämä on tarkistaa virheloki. Oletusvirheloki on osoitteessa /var/log/httpd/error_log Red Hat -järjestelmissä ja /var/log/apache2/error_log Debian-järjestelmissä. Jos Apachen kuuntelua varten ei ole määritetty porttia, viesti ei kuunteluliitäntöjä käytettävissä, sammutus seuraa Apachen yritystä käynnistää uudelleen.
[huomautus] SIGHUP vastaanotettu.Yritetään käynnistää uudelleen, kuunteluliitäntöjä ei ole saatavilla, sammutetaanLokeja ei voida avataHTTP/1.1 403 Kielletty
Tämä vastaus osoittaa, että oikeudet, jotka antavat Apachelle pääsyn pyytämällesi sivulle, eivät ole oikein. Ehkä hakemiston käyttöoikeudet ovat virheelliset, tai se voi olla sivu itse.
Saatat myös nähdä 403-vastauksen seuraavissa tilanteissa:
- "DocumentRoot" ei sisällä hakemistotiedostoa, jonka nimi on yleensä "index.html" tai "index.php". Huomaa, että tiedoston nimessä on isot ja pienet kirjaimet eroteltu toisistaan. Virtuaalinen isäntä ei sisällä DirectoryIndex-komentoa, joka määrittää oletushakemistotiedoston.Apache-virhelokit näyttävät yleensä, minkä hakemiston tai tiedoston käyttöoikeudet on asetettu väärin. Yksittäiset virtuaalipalvelimet saattavat kirjoittaa virheitä omiin lokeihinsa, jos ne on määritetty niin, joten tarkista myös nämä lokit.
Älä lannistu kiireisen palvelimen lokitiedostojen datamäärästä. Käytä sen sijaan häntäkomentoa tarkastellaksesi valikoivasti vain lokin kymmenen viimeisintä riviä. Esimerkiksi:
tail /var/log/apache2/error\_logNäet uudet merkinnät, kun ne lisätään virhelokiin tai mihin tahansa lokiin, samalla kun testaat palvelinta, jos käsket tail-komentoa "seuraamaan" lokia. Esimerkiksi:
tail -f /var/log/httpd/error\_logSeuraavassa on esimerkkejä yleisistä käyttöoikeuksiin liittyvistä määritysvirheistä, joita voi esiintyä Apachen lokeissa:
Seuraava lokimerkintä osoittaa, että vh2.example.com-tiedoston index.html käyttöoikeudet estävät pääsyn Apachelle.
[error] [client 203.0.113.96] (13)Lupa estetty: pääsy osoitteeseen /index.html estettySeuraava lokimerkintä osoittaa, että /var/www/vhosts/vh2-hakemiston käyttöoikeudet estävät Apachen lukupyynnön.
[virhe] [asiakas 203.0.113.96] (13) Lupa estetty: tiedostooikeudet estävät palvelimen pääsyn: /var/www/vhosts/vh2/index.htmlSeuraava lokimerkintä osoittaa, että Apachella ei ole suoritus- tai lukuoikeuksia yksi DocumentRootin yllä olevista hakemistoista.
[virhe] [asiakas 203.0.113.96] (13) Lupa estetty: pääsy / estetty