Как да създадете Nginx виртуален хост (сървърен блок)

Сподели

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

Съдържание

Nginx е проектиран да обработва множество домейни на един сървър и IP адрес. С други думи, ако имате един сървър, който се използва като уеб сървър и той е разпределил само един IP адрес, тогава, за да имате повече от един уебсайт или домейн, работещи на сървъра, използвате виртуални хостове на Nginx.

Преди да започнете този урок, ще трябва да инсталирате Nginx. За да научите как, прочетете Как да инсталирате Nginx уеб сървър на Linux.

Какво е виртуален хост?

Ако не сте сигурни какво е виртуален хост, позволете ми да обясня. Това е Термин на Apache HTTP сървър, обаче, често се използва и от потребителите на Nginx. Всъщност правилният термин за Nginx е сървърен блок.

Свързани: Apache срещу Nginx: Кой уеб сървър трябва да изберете

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

Как работи виртуалният хост?

Когато стартирате софтуер за уеб сървър като Nginx на сървър, този уеб сървър ще се свърже към един или повече мрежови портове. Обикновено за уеб сървър, който ще бъде портове 80 и 443.

Сега, когато компютърът отиде да посети уебсайт, той ще изпрати заявка по интернет до сървъра и сървърът ще получи тази заявка. Първото нещо, което сървърът ще направи, е да погледне порта, към който е изпратена заявката до порта на местоназначението.

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

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

Без значение какъв уебсайт е поискан, сървърът не може да използва само номера на порта за порта на дестинацията, за да определи до кой уебсайт се опитва да получи достъп клиентът. Всичко, което сървърът ще направи, е да каже „Изпращам тази заявка до Nginx“ и оттам Nginx трябва да реши какво ще изпрати обратно.

Nginx има концепция, наречена сървърни блокове. Сървърните блокове всъщност могат да се използват за две различни неща. Те могат да се използват за обслужване на различни уебсайтове въз основа на IP адреса, който се иска, или те може да се използва за обслужване на различни уебсайтове въз основа на името на домейна, което се използва.

Как работи Nginx Virtual Host

Така че, когато въведете името на уебсайта харесвайте www.example.com и когато сървърът получи това, Nginx може действително да погледне вътре в HTTP заглавките кое име на сървъра е поискано и от там, въз основа на своите конфигурирани виртуални хостове, да вземе решение в коя директория съхранява файловете на уебсайта и да върне правилния отговор обратно към клиента въз основа на името на сървъра.

Как да създадете Nginx виртуални хостове (сървърни блокове)

Има две директории, в които можем да създаваме и съхраняваме нашите конфигурационни файлове за виртуален хост. И двете са разположени вътре /etc/nginx директория. Имената на тези две директории са sites-available и sites-enabled.

  • /etc/nginx/sites-available: Директорията, в която са дефинирани отделни виртуални хостове (уебсайтове). Имайте предвид, че Nginx няма да използва конфигурационните файлове, намиращи се в тази директория освен ако не са свързани към /etc/nginx/sites-enabled директория.
  • /etc/nginx/sites-enabled: Списък на виртуалните хостове (уебсайтове), които се обслужват активно от Nginx.

Вероятно се чудите защо са ни необходими две директории, за да съхраняваме нашите виртуални хост файлове? Основното предимство на това е, че можем да създадем много файлове с виртуални хостове на нашия Nginx сървър, но можем да ги активираме според нашите изисквания.

Сега ще създадем виртуални хост файлове за хостване на множество сайтове с множество домейни в нашия Nginx сървър. Имената на домейни са website1.com и website2.com.

1. Създаване на структурата на директорията

Първото нещо, което трябва да направим, е да създадем директория за всеки виртуален хост, в която да съхраняваме различното съдържание на уебсайта. Ще поставим директориите в /var/www и ще ги наименуваме след всяко име на домейн.

Изпълнете следните команди, за да създадете директории:

sudo mkdir -p /var/www/website1.com
sudo mkdir -p /var/www/website2.com
Структура на директорията на виртуалния хост на Nginx

В -p флагът в командата по-горе казва mkdir за да създадете всички необходими родителски директории по пътя.

Свързани: 20 основни Linux команди за начинаещи, обяснени с примери

2. Създаване на тестови страници за всеки уебсайт

След това, за демонстрационни цели, нека просто създадем файл index.html файл в основната директория на документа на домейна, така че ще имаме какво да покажем.

sudo vim /var/www/website1.com/index.html

Поставете следните редове:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Welcome to Website 1!</title>
    </head>
    <body>
        <h1>Welcome to Website 1!</h1>
    </body>
</html>

Сега повторете горната стъпка за website2.com.

sudo vim /var/www/website2.com/index.html

Поставете следните редове:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Welcome to Website 2!</title>
    </head>
    <body>
        <h1>Welcome to Website 2!</h1>
    </body>
</html>

3. Създайте виртуален хост на Nginx (сървърен блок)

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

sudo vim /etc/nginx/sites-available/website1.com

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

Сега поставете следното съдържание във вашия виртуален хост файл:

server {
    listen 80;
    server_name website1.com www.website1.com;
    root /var/www/website1.com;

    access_log /var/log/nginx/website1-access.log;
    error_log /var/log/nginx/website1-error.log;
}

За да направим нещата по-ясни, нека разбием този синтаксис. Ето какво означава всеки параметър:

  • listen: Посочете на кой порт Nginx сървърът да слуша за връзки.
  • server_name: Тук съпоставяме заявки за нашия домейн. Директивата съдържа списък с имена на домейни, които искаме да използваме за достъп до нашия сайт.
  • root: Местоположението на директорията, в която сме съхранили файловете на нашия уебсайт.
  • error_log: Пълен път към регистрационния файл, в който съхраняваме всички регистрационни файлове за грешки на този виртуален хост.
  • access_log: Пълен път към регистрационния файл, в който съхраняваме всички регистрационни файлове за достъп на този виртуален хост.

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

sudo cp /etc/nginx/sites-available/website1.com /etc/nginx/sites-available/website2.com

Отворете новия файл и го коригирайте така, че да съответства на нашия втори (website2.com) име на домейн:

sudo vim /etc/nginx/sites-available/website2.com
server {
    listen 80;
    server_name website2.com www.website2.com;
    root /var/www/website2.com;

    access_log /var/log/nginx/website2-access.log;
    error_log /var/log/nginx/website2-error.log;
}

4. Активирайте виртуални хостове на Nginx (блок на сървъра)

Последното нещо, което трябва да направим преди тестване, е да активираме виртуалните хостове. Можем да направим това, като създадем символна връзка от файла към sites-enabled директория:

sudo ln -s /etc/nginx/sites-available/website1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/website2.com /etc/nginx/sites-enabled/

Както можете да видите от изображението по-долу, тези файлове вече са свързани в sites-enabled директория.

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

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

sudo nginx -t

И накрая, ако не са открити проблеми, рестартирайте услугата Nginx, за да приложите промените:

sudo systemctl restart nginx

5. Тестване на виртуалните хостове (по избор)

За да тестваме виртуалните хостове на Nginx, първо ще трябва да насочим нашите записи за имена на домейни към IP адреса на сървъра. В нашия случай IP адресът на сървъра е 192.168.122.101.

Ако сте на Linux, отворете /etc/hosts файл на вашия настолен компютър (този, от който ще извършите теста), като използвате командата по-долу:

sudo vim /etc/hosts

И добавете имената на виртуални домейни едно по едно, както е показано по-долу.

/etc/hosts

Запазете и затворете файла, когато приключите. Процедурата по този начин ще ни позволи да тестваме домейни, които всъщност не притежаваме.

Сега отворете браузъра си и въведете www.website1.com и www.website2.com един по един. Ще видите индексните страници на двата домейна съответно.

Тест за виртуални хостове на Nginx

Успешно конфигурирахте два независими домейна с Nginx.

6. Деактивирайте виртуалните хостове на Nginx (блок на сървъра)

За да деактивираме виртуален хост в Nginx, просто трябва да премахнем символната връзка, която създадохме, докато активираме файла за виртуален хост. Например за деактивиране website2.com, просто трябва да изпълним следната команда:

sudo rm -rf /etc/nginx/sites-enabled/website2.com

За да приложим промените, трябва да рестартираме Nginx сървъра:

sudo systemctl restart nginx

Заключение

В тази статия ви показах как да създадете виртуални хостове на Nginx (сървърни блокове) и да хоствате множество домейни на един Linux сървър. За да създадете виртуален хост за друг домейн, просто повторете същите стъпки. Разбира се, Nginx може да направи много повече.

Свързано: Как да конфигурирате Nginx да работи с PHP чрез PHP-FPM

Освен това, ако искате да знаете как да защитите уебсайта си с безплатен SSL сертификат, препоръчвам да преминете през нашето ръководство Да криптираме: Вземете безплатен SSL сертификат с помощта на Certbot.

За повече информация относно настройката на Nginx сървър, можете да се обърнете към официална документация на Nginx.

Благодаря за четенето! Надявам се, че статията ви е била полезна и сте успели да настроите виртуалните хостове. Чувствайте се свободни да оставите коментар, ако имате въпроси.

Публикациите се превеждат автоматично с google translate


Сподели