• Дигитални аксесоари
  • сървър
  • Дигитален живот
  • Политика за поверителност
  • Свържете се с нас
  1. Home
  2. Article
  3. Обслужвайте множество домейни, като използвате виртуални хостове

Обслужвайте множество домейни, като използвате виртуални хостове

Rsdaa 27/12/2021 1013

Обслужване на множество домейни чрез виртуални хостове

Последна актуализация на: 21.09.2016

Автор: Rackspace Support

Повечето хора обслужват повече от един домейн на облачния си сървър. Независимо дали обслужвате различни домейни или различни поддомейни на един и същи домейн, процедурата е същата. Тази статия описва как да създавате виртуални хостове за обслужване на множество домейни и как да отстранявате проблеми с конфигурации на виртуални хостове, базирани на имена на Apache.

Създаване на виртуални хостове за множество домейни

Когато браузър изпрати заявка до IP адреса на вашия сървър с искане за съдържанието на името на вашия домейн (например https://yourexampledomain.com), вашият уеб сървърът обслужва HTTP представяне на вашия сайт. Ако сървърът обслужва само един уебсайт, той обслужва HTML във вашата /var/www/html директория, започвайки с index.html. Но наличието на уникален сървър за всеки уебсайт, който искате да обслужвате, е скъпо и неефективно използване на вашите ресурси.

Базираните на имена виртуални хостове ви позволяват да обслужвате съдържание за множество уебсайтове от един сървър.

Един от първите редове във всеки конфигурационен файл на виртуален хост указва името на домейна, което е свързано с виртуалния хост. Следва примерна конфигурация на виртуален хост за Apache, обслужващ domain1.com:

ServerNamedomain1.comServerAlias ​​www.domain1.com

Следният пример показва конфигурация на виртуален хост за NGINX:

сървър {server_namewww.domain1.com;rewrite ^/(.\*) https://domain1.com/$1 permanent;

Всяка конфигурация започва малко по-различно, но се прилага същият принцип: този конкретен виртуален хост отговаря на заявки за domain1.com и www.domain1.com.

За да обслужвате различно съдържание за различни домейни, вие добавяте друг виртуален хост.

Например имате поддомейн, наречен blog.domain1.com, който обслужва блог.

Първо създавате папка във вашата папка public_html със съответните файлове за блога (например инсталация на WordPress).

След това създавате виртуален хост с server_name или ServerName, посочени като blog.domain1.com, и го конфигурирате да сочи към файловете и папките на блога във вашата папка public_html.

За повече информация относно виртуалните хостове използвайте документа на Apache Виртуални хостове с база имена

Отстраняване на неизправности

Този раздел ви показва как да отстранявате проблеми с конфигурации на виртуален хост, базирани на имена на Apache. Той предоставя полезни команди за тестване на вашата конфигурация на виртуален хост, описва как да интерпретирате изхода им и описва как те помагат за коригиране на общи проблеми с конфигурацията на виртуален хост.

Рестартирайте Apache

Преди да можете да диагностицирате проблем, уверете се, че сте рестартирали Apache след последния път, когато сте направили промени във вашите конфигурационни файлове на Apache:

За дистрибуции на Red Hat използвайте:

sudo /usr/sbin/httpd -k restart

За дистрибуции на Debian използвайте:

sudo /usr/sbin/apache2 -k restart

Ако Apache ви даде предупреждение или съобщение за грешка, отбележете го за по-късно. Следващата ви стъпка е да получите информация за конфигурацията на виртуалния хост.

Вземете отчет за конфигурация

Изпълнете командата -S на уеб сървъра, за да проверите конфигурацията на вашия виртуален хост

За дистрибуции, извлечени от Red Hat, използвайте:

sudo /usr/sbin/httpd -S

За извлечени от Debian дистрибуции използвайте:

sudo /usr/sbin/apache2 -S

Изходът показва настройките на виртуалния хост от конфигурационния файл. Следващият пример показва конфигурационния отчет за сървър, конфигуриран с два базирани на имена виртуални хоста: vh1.example.com и vh2.example.com. Номерираните редове са обяснени след примера.

Конфигурация на VirtualHost:заместващ знак NameVirtualHosts и \_default\_ сървъри:[1] \*:80is a NameVirtualHost[2] сървър по подразбиране vh1.example.com (/etc/httpd/conf/custom/virtualhost.conf:3)[3] порт 80 namevhost vh1.example.com (/etc/httpd/conf/custom/virtualhost.conf:3)[4] порт 80 namevhost vh2.example.com (/etc/httpd/conf/custom/virtualhost.conf:8 )[5] Синтаксис OK

Ред [1] съобщава, че уеб сървърът слуша на порт по подразбиране 80 за всички IP адреси, които Apache слуша, и че базираният на имена виртуален хостинг е включен. * е заместващ знак, указващ всички IP адреси.

Ред [2] отчита виртуалния хост по подразбиране, който уеб сървърът псевдоним на сървъра за всички заявки, за които не е поискано конкретно име на хост. Той също така показва пътя до конфигурационния файл и номера на реда, където е зададена тази конфигурация.

Ред [3] съобщава порта и името на първата намерена конфигурация на виртуален хост, файла, в който е конфигуриран, и номера на реда, от който започва конфигурацията му.

Ред [4] съобщава порта и името на втората намерена конфигурация на виртуален хост, файла, в който е конфигуриран, и номера на реда, от който започва конфигурацията му.

Ред [5] съобщава дали синтаксисът на конфигурацията е правилен, въпреки че това не означава непременно, че вашият сайт работи

Следният изход е произведен от следната файлова конфигурация на виртуален хост:

NameVirtualHost \*:80 Включва базирана на имена хост резолюция и свързва виртуалния сървър с IP адреси и портове, както в [1] по-горе. \* е заместващ знак, указващ всички IP адреси. Конфигурира първия виртуален хост по подразбиране в [2] & [3] по-горе. Това е по подразбиране, защото е първият виртуален хост, чийто IP и порт съвпадат с тези в директивата NameVirtualHost преди него.ServerName vh1.example.comDocumentRoot /var/www/vhosts/vh1 Конфигурира втория виртуален хост в [4] по-горе.ServerName vh2.example.comDocumentRoot /var/www/vhosts/vh2

Сега, след като видяхте как изглежда основната конфигурация на виртуален хост и как тя се свързва със собствения отчет за конфигурация на Apache, можете да използвате тези отчети, за да разгледате често срещани проблеми с конфигурацията . Следващите раздели описват някои от тези проблеми и предоставят насоки как да ги коригирате.

Хостове, които не са настроени като базирани на имена виртуални хостове

Ако се изпълнява httpd -S отчита следното предупреждение:

[Сряда, 18 май 15:24:51 2011 г.] [предупреждение] \_default\_ VirtualHost припокриване на порт 80, първият има приоритетVirtualHost configuration:wildcard NameVirtualHosts и \_default\_ сървъри:\*:80 vh1.example.com (/ etc/httpd/conf/custom/virtualhost.conf:3)\*:80 vh2.example.com (/etc/httpd/conf/custom/virtualhost.conf:8)Синтаксис OK

Това предупреждение показва, че множество виртуални хостовете се опитват да използват един и същ „сокет“, без да са настроени като базирани на имена виртуални хостове. Тази грешка често възниква, когато за първи път се създават виртуални хостове на Apache, тъй като директивата NameVirtualHost по подразбиране е коментирана с хеш символ. Този символ инструктира Apache да игнорира директивата.

За да коригирате този проблем в конфигурационен файл на Apache по подразбиране, проверете дали директивата NameVirtualHost *:80 не е коментирана. Ако работите с минимален конфигурационен файл на Apache, добавете директива NameVirtualHost *:80 над отделните конфигурации на виртуален хост.

Следният пример показва коментираната директива, която е причинила грешката:

#NameVirtualHost \*:80ServerName vh1.example.comDocumentRoot /var/www/vhosts/vh1ServerName vh2.example.comDocumentRoot /var/www/vhosts/vh2Element липсва от директивата VirtualHost

Ако се изпълнява httpd -S съобщава следното съобщение за грешка:

Синтаксична грешка на ред 8 на /etc/httpd/conf/custom/virtualhost.conf: директивата изисква допълнителни аргументи

Това съобщение означава, че в директивата VirtualHost на виртуалния хост липсва необходим елемент. Директивата VirtualHost е първият ред на всяка индивидуална конфигурация на виртуален хост. В този случай грешката е на ред 8 на конфигурационния файл /etc/httpd/conf/custom/virtualhost.conf.

Следва конфигурацията на Apache, която доведе до тази грешка по-горе:

NameVirtualHost \*:80ServerName vh1.example.comDocumentRoot /var/www/vhosts/vh1ServerName vh2.example.comDocumentRoot /var/www/vhosts/vh2

Имайте предвид, че втората директива VirtualHost няма указан IP адрес или порт, което е причината за грешката.

Следва коригирана версия на предходния пример с добавяне на \*:80 към директивата на виртуалния хост. Както винаги, \* е заместващ знак, указващ всички IP адреси.

NameVirtualHost \*:80ServerName vh1.example.comDocumentRoot /var/www/vhosts/vh1ServerName vh2.example.comDocumentRoot /var/www/vhosts/vh2 Номерата на портовете не съвпадат

Ако се изпълнява httpd -S, показва, че виртуален хост е посочено по-горе е ред NameVirtualHost:

Конфигурация на VirtualHost:заместващ знак NameVirtualHosts и \_default\_ сървъри:\*:800vh2.example.com (/etc/httpd/conf/custom/virtualhost.conf:8)\*:80 е NameVirtualHost сървър по подразбиране vh1.example.com ( /etc/httpd/conf/custom/virtualhost.conf:3)порт 80 namevhost vh1.example.com (/etc/httpd/conf/custom/virtualhost.conf:3)Синтаксис OK

В този пример конфигурацията test отчита конфигурацията vh2.example.com, преди да отчете конфигурацията NameVirtualHost. Може да видите тази грешка, ако IP адресът или портът на VirtualHost не съответства на IP адреса или порта на директивата NameVirtualHost на уеб сървъра. В този пример отчетът показва, че vh2.example.com използва порт 800, а не порт 80. Номерът на порта е въведен неправилно, когато е конфигуриран слушащият порт на виртуалния хост vh2.example.com. В резултат на това Apache третира vh2.example.com като отделен виртуален хост, базиран на порт.

Тестовата команда httpd -S не ви предупреждава за този проблем, тъй като е позволено да конфигурирате виртуални хостове да използват всеки порт, като например 800, без те да са част от базираната на имена конфигурация на виртуален хост на същия сървър.

Ако срещнете тази грешка, вероятно ще видите съдържание от виртуалния хост по подразбиране (vh1.example.com в този пример), когато се опитате да видите сайта във вашия уеб браузър.

За да ви помогнем да картографирате предходния изход към неговия конфигурационен файл, по-долу е конфигурацията на виртуален хост, която създаде тази грешка:

NameVirtualHost \*:80ServerName vh1.example.comDocumentRoot /var/www/vhosts/vh1ServerName vh2.example.comDocumentRoot /var/www/vhosts/vh2Document главната директория не съществува

Ако изпълнява httpd -S съобщава следната грешка:

Предупреждение: DocumentRoot [/etc/httpd/var/www/vhosts/vh2] не съществува

Тази грешка показва, че директорията, посочена като съдържаща файловете на уебсайта за виртуалния хост vh2.example.com, не съществува или че Apache няма достъп до него. Подобни грешки могат да се появят за всеки от файловите пътища, посочени в конфигурацията на виртуален хост, като пътищата към регистрационните файлове на виртуалния хост.

За да коригирате тази грешка, уверете се, че сте създали директорията. Ако сте го създали, проверете дали няма грешки в директивата DocumentRoot. Често срещана грешка е да се пропусне първоначалната наклонена черта на пътя (/). Изоставянето на наклонената черта инструктира Apache да прочете пътя – пътя на DocumentRoot в този случай – като относителен път, тоест като път спрямо пътя на ServerRoot на основната конфигурация на Apache.

Следният пример показва само един от начините, по които се създава тази грешка. Пътят за директивата DocumentRoot в първия виртуален хост започва с наклонена черта, но вторият не започва.

ServerRoot /etc/httpdNameVirtualHost \*:80ServerName vh1.example.comDocumentRoot /var/www/vhosts/vh1ServerName vh2.example.comDocumentRoot var/www/vhosts/vh2Използване на cURL за тестване на вашия сайт

След като проверите конфигурационните файлове на виртуалния хост и командата httpd -S не съобщава за проблеми, опитайте да получите достъп до вашия сайт чрез cURL:

curl -I www.example.com

Резултатът трябва да изглежда нещо подобно:

HTTP/1.1 200 OK Дата: събота, 07 май 2011 г. 15:09:50 GMTServer: Apache/2.2.3 (CentOS) Последна промяна: понеделник, 25 април 2011 г. 11:07:43 GMTETag: "2c32e-77-4a1bc37723dc0"Приемам -Диапазони: bytesContent-Length: 119Content-Type: text/html; charset=UTF-8

Първият ред показва кода на състоянието. Искате да видите 200 OK, както е показано в примера. Ако това е, което виждате, тествайте уеб сървъра с браузъра си, но помислете, че браузърът ви може да показва кеширана страница.

Ако не виждате 200 OK, може да видите едно от следните често срещани съобщения:

curl: (6) Не може да разреши хост vh1.example.com

Ако cURL съобщи, че не може да намери хоста, проверете дали има запис A за домейна, който сочи към правилния IP адрес за вашия сървър. Можете да използвате dig, за да направите това:

dig vh1.example.com

curl: (7) не можа да се свърже с хоста

Проверете дали вашите конфигурационни файлове на Apache включват необходимите директиви за слушане и че не са коментирани. Нуждае се поне от Listen 80.

Друг начин да проверите това е да проверите регистъра на грешките. Регистърът на грешките по подразбиране е /var/log/httpd/error_log на Red Hat системи и /var/log/apache2/error_log на Debian системи. Ако не е посочен порт, който да слуша Apache, съобщението няма налични гнезда за слушане, изключването следва опита на Apache да се рестартира.

[известие] SIGHUP получен. Опит за рестартиране, няма налични гнезда за слушане, изключване Невъзможно отваряне на регистрационни файлове

HTTP/1.1 403 Забранено

Този отговор показва, че разрешенията, които позволяват достъп на Apache до страницата, която искате, не са правилни. Може би разрешенията на директорията са неправилни или това може да е самата страница.

Може също да видите отговор 403 в следните ситуации:

- `DocumentRoot` не съдържа индексен файл — обикновено се нарича `index.html` или `index.php`. Обърнете внимание, че името на файла е чувствително към главни и малки букви.- Виртуалният хост не съдържа директива `DirectoryIndex`, указваща индексния файл по подразбиране.

Регистрите за грешки на Apache обикновено показват коя директория или файл има разрешенията, зададени неправилно. Индивидуалните виртуални хостове може да записват грешки в собствените си регистрационни файлове, ако са били конфигурирани така, така че проверете и тези регистрационни файлове.

Не се обезсърчавайте от количеството данни в регистрационните файлове на натоварения сървър. Вместо това използвайте командата tail, за да прегледате избирателно само последните десет реда от дневника. Например:

tail /var/log/apache2/error\_log

Можете да видите новите записи, когато се добавят към регистъра на грешките, или който и да е журнал, докато тествате сървъра, ако инструктирате командата tail да „следва“ журнала. Например:

tail -f /var/log/httpd/error\_log

Следват примери за някои често срещани грешки в конфигурацията, свързани с разрешенията, които могат да се появят в регистрационните файлове на Apache:

Следният запис в регистрационния файл показва, че разрешенията за файла index.html за vh2.example.com отказват достъп до Apache.

[грешка] [клиент 203.0.113.96] (13) Разрешението е отказано: достъпът до /index.html е отказан

Следният запис в регистрационния файл показва, че разрешенията за директорията /var/www/vhosts/vh2 блокират заявката за четене на Apache.

[грешка] [клиент 203.0.113.96] (13) Разрешението е отказано: разрешенията за файлове отказват достъп до сървъра: /var/www/vhosts/vh2/index.html

Следният запис в регистрационния файл показва, че Apache няма разрешения за изпълнение или четене на една от директориите над DocumentRoot.

[грешка] [клиент 203.0.113.96] (13) Разрешението е отказано: достъп до / отказан

PREV: Изчисляване на клиентски сървър - Tutorialspoint

NEXT: Топ 10 на недостатъците на сървърната виртуализация

Popular Articles

Hot Articles

Navigation Lists

Back to Top