15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало
31.10.2024

Как да конфигурирате виртуални хостове в Nginx на Ubuntu

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

Независимо дали управлявате личен портфолио, стартирате уебсайтове на клиенти или мащабирате многостепенно приложение, това ръководство предоставя пълен, готов за производство преглед на конфигурирането на Nginx виртуални хостове на Ubuntu. Ще покрием структурата на директориите, конфигурацията на server block, активирането на сайтове, настройката на SSL/HTTPS и отстраняването на неизправности — всичко, което ви трябва, за да преминете от нула към напълно функционален многосайтов Nginx сървър.

> Ищете надежден Ubuntu сървър, за да следвате? AlexHost VPS Hosting планове ви дават пълен root достъп, SSD хранилище и моментално разгръщане — идеално за този точен случай на употреба.

Съдържание

  1. Предварителни условия
  2. Настройте директориите за всеки уебсайт
  3. Създайте примерно HTML съдържание
  4. Създайте конфигурационни файлове на виртуални хостове
  5. Активирайте виртуалните хостове
  6. Тестирайте конфигурацията на Nginx
  7. Рестартирайте Nginx, за да приложите промените
  8. Достъпете вашите уебсайтове
  9. Активирайте HTTPS с Let’s Encrypt (препоръчано)
  10. Отстраняване на често срещани проблеми
  11. Заключение

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

Преди да започнете, уверете се, че са изпълнени следните условия:

Nginx инсталиран на вашия сървър

Ако Nginx все още не е инсталиран, изпълнете следните команди на вашия Ubuntu сървър:

sudo apt update
sudo apt install nginx

Проверете инсталацията и проверете дали услугата работи:

sudo systemctl status nginx

Трябва да видите active (running) в изхода. Ако не, стартирайте го ръчно:

sudo systemctl start nginx
sudo systemctl enable nginx

Имена на домейни, насочени към вашия сървър

Всеки виртуален хост изисква име на домейн, което се разрешава на публичния IP адрес на вашия сървър. Ще трябва да създадете A записи в настройките на вашия DNS, насочени към IP адреса на сървъра.

> Нужен ви домейн? Регистрирайте своя чрез AlexHost регистрация на домейни и управлявайте DNS записи директно от вашата контролна панел.

За целите на локалното тестване можете да заобиколите DNS напълно, като редактирате вашия /etc/hosts файл (обхванат в стъпка 7).

Необходими разрешения

Ще ви трябват sudo привилегии на вашия Ubuntu сървър, за да създавате директории, редактирате конфигурационни файлове и управлявате услугата Nginx.

Стъпка 1: Настройте директориите за всеки уебсайт

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

В това ръководство ще конфигурираме два примерни домейна: example1.com и example2.com. Заменете тези със своите действителни имена на домейни през целия текст.

Създайте директориите на уеб корена

sudo mkdir -p /var/www/example1.com/html
sudo mkdir -p /var/www/example2.com/html

Флагът -p създава всички междинни директории, както е необходимо.

Присвойте правилното собственост

Дайте собственост на тези директории на www-data, системния потребител, който Nginx работи като:

sudo chown -R www-data:www-data /var/www/example1.com/html
sudo chown -R www-data:www-data /var/www/example2.com/html

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

Задайте разрешения на директориите

sudo chmod -R 755 /var/www

Разрешението 755 означава, че собственикът има пълен достъп за четене/писане/изпълнение, докато групите и други потребители имат достъп за четене и изпълнение — подходящо за публично обслужван уеб контент.

Стъпка 2: Създайте примерно HTML съдържание

За да проверите, че всеки виртуален хост работи правилно, създайте прост index.html файл за всеки сайт.

За example1.com

echo "<h1>Welcome to Example1.com!</h1>" | sudo tee /var/www/example1.com/html/index.html

За example2.com

echo "<h1>Welcome to Example2.com!</h1>" | sudo tee /var/www/example2.com/html/index.html

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

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

Nginx съхранява конфигурационни файлове на сайтове в /etc/nginx/sites-available/. Всеки файл определя server block — еквивалентът на Nginx на Apache виртуален хост. Активираните сайтове се свързват символично в /etc/nginx/sites-enabled/.

Конфигурация за example1.com

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

sudo nano /etc/nginx/sites-available/example1.com

Добавете следния server block:

server {
    listen 80;
    listen [::]:80;

    server_name example1.com www.example1.com;

    root /var/www/example1.com/html;
    index index.html index.htm;

    access_log /var/log/nginx/example1.com.access.log;
    error_log  /var/log/nginx/example1.com.error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}

Запазете и затворете файла (Ctrl+X, след това Y, след това Enter).

Конфигурация за example2.com

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

sudo nano /etc/nginx/sites-available/example2.com

Добавете следния server block:

server {
    listen 80;
    listen [::]:80;

    server_name example2.com www.example2.com;

    root /var/www/example2.com/html;
    index index.html index.htm;

    access_log /var/log/nginx/example2.com.access.log;
    error_log  /var/log/nginx/example2.com.error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}

Обяснени ключови директиви

ДирективаЦел
listen 80Слуша входящи HTTP връзки на порт 80
listen [::]:80Активира IPv6 поддръжка на порт 80
server_nameОпределя кои имена на домейни този блок обработва
rootЗадава документния корен — където се съхраняват файлове на уебсайта
indexОпределя файла по подразбиране, който трябва да бъде обслужен, когато е поискана директория
try_filesОпитва се да обслужи поискания файл; връща 404, ако не е намерен
access_log / error_logОтделни логови файлове на сайт за по-лесно отстраняване на неизправности

Стъпка 4: Активирайте виртуалните хостове

Nginx активира сайтове, като създава символични връзки от sites-available към sites-enabled. Този дизайн ви позволява да подготвите конфигурации без да ги активирате веднага.

sudo ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/example2.com /etc/nginx/sites-enabled/

Деактивирайте сайта по подразбиране (опционално, но препоръчано)

Ако искате да предотвратите интерферирането на заместващата страница на Nginx по подразбиране, деактивирайте я:

sudo rm /etc/nginx/sites-enabled/default

Винаги можете да я активирате отново по-късно, като пресъздадете символичната връзка.

Стъпка 5: Тестирайте конфигурацията на Nginx

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

sudo nginx -t

Успешен тест връща:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

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

Стъпка 6: Рестартирайте Nginx, за да приложите промените

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

sudo systemctl restart nginx

Алтернативно, използвайте reload за грациозен рестарт, който не прекъсва активни връзки:

sudo systemctl reload nginx

Стъпка 7: Достъпете вашите уебсайтове

Ако DNS вече е конфигуриран

Ако имената на вашите домейни вече са насочени към IP адреса на вашия сървър чрез DNS A записи, просто отворете браузър и навигирайте до:

  • http://example1.com
  • http://example2.com

Трябва да видите съответните съобщения “Добре дошли”, които създадохте в стъпка 2.

За локално тестване (без DNS)

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

Отворете файла с повишени привилегии:

sudo nano /etc/hosts

Добавете следните редове, заменяйки YOUR_SERVER_IP с действителния IP адрес на вашия сървър:

YOUR_SERVER_IP example1.com www.example1.com
YOUR_SERVER_IP example2.com www.example2.com

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

Стъпка 8: Активирайте HTTPS с Let’s Encrypt (препоръчано)

Стартирането на уебсайтове чрез обикновен HTTP вече не е приемливо за производствени среди. HTTPS криптира трафика между вашия сървър и посетителите, подобрява класирането в SEO и е необходимо за съвременни функции на браузъра. Let’s Encrypt предоставя безплатни, автоматично подновяеми SSL/TLS сертификати.

> Предпочитате премиум SSL решение? AlexHost предлага надеждни SSL сертификати за бизнеси, които имат нужда от разширена валидация или поддръжка на джокер.

Инсталирайте Certbot

sudo apt install certbot python3-certbot-nginx

Получете и инсталирайте SSL сертификати

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

sudo certbot --nginx -d example1.com -d www.example1.com
sudo certbot --nginx -d example2.com -d www.example2.com

Следвайте интерактивните подкани. Certbot ще:

  1. Проверява собственост на домейна чрез HTTP предизвикателство
  2. Получава подписан сертификат от Let’s Encrypt
  3. Автоматично актуализира вашия server block на Nginx, за да слуша на порт 443
  4. Конфигурира пренасочване от HTTP към HTTPS

Проверете автоматичното подновяване

Сертификатите на Let’s Encrypt изтичат всеки 90 дни. Certbot инсталира systemd таймер, за да управлява подновяванията автоматично. Тестирайте го с:

sudo certbot renew --dry-run

Ако пробното изпълнение завърши без грешки, вашите сертификати ще се подновят автоматично без никакво ръчно намеса.

Как ще изглежда вашия актуализиран server block

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

server {
    listen 443 ssl;
    server_name example1.com www.example1.com;

    root /var/www/example1.com/html;
    index index.html;

    ssl_certificate /etc/letsencrypt/live/example1.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example1.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        try_files $uri $uri/ =404;
    }
}

server {
    listen 80;
    server_name example1.com www.example1.com;
    return 301 https://$host$request_uri;
}

Отстраняване на често срещани проблеми

15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало