Как настроить виртуальные хосты в Nginx на Ubuntu
Настройка виртуальных хостов в Nginx позволяет размещать несколько веб-сайтов на одном сервере, при этом каждый сайт будет иметь собственное доменное имя. Виртуальные хосты Nginx настраиваются с помощью “серверных блоков”, которые определяют настройки для каждого сайта. В этом руководстве вы узнаете, как настроить виртуальные хосты на сервере Ubuntu с Nginx.
1. Необходимые условия
- Установлен Nginx: Убедитесь, что Nginx установлен на вашем сервере. Если нет, установите его с помощью:sudo apt update sudo apt install nginx
- Доменные имена: Укажите доменные имена, которые вы хотите разместить на IP-адресе вашего сервера. Для тестирования можно изменить файл /etc/hosts.
2. Настройте каталоги для каждого сайта
У каждого сайта должна быть своя директория для хранения файлов сайта. Давайте создадим каталоги для двух примеров сайтов, example1.com и example2.com.
sudo mkdir -p /var/www/example1.com/html sudo mkdir -p /var/www/example2.com/html
Предоставьте право собственности на эти каталоги пользователю Nginx (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
Установите соответствующие разрешения:
sudo chmod -R 755 /var/www
3. Создайте примерный контент
Чтобы протестировать виртуальные хосты, добавьте образцы 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
4. Создание файлов конфигурации виртуального хоста
Теперь мы создадим файл конфигурации серверного блока (виртуального хоста) для каждого сайта. Nginx хранит эти файлы конфигурации в каталоге /etc/nginx/sites-available/.
Шаг 1: Создание конфигурации для Example1.com
Создайте новый файл конфигурации для example1.com:
sudo nano /etc/nginx/sites-available/example1.com
Добавьте следующую конфигурацию:
server {
listen 80;
server_name example1.com www.example1.com;
root /var/www/example1.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Шаг 2: Создаем конфигурацию для Example2.com
Создайте файл конфигурации для example2.com:
sudo nano /etc/nginx/sites-available/example2.com
Добавьте следующую конфигурацию:
server {
listen 80;
server_name example2.com www.example2.com;
root /var/www/example2.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
5. Включение виртуальных хостов
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/
6. Протестируйте конфигурацию
Чтобы убедиться в отсутствии синтаксических ошибок в конфигурации, выполните команду:
sudo nginx -t
Если все правильно, вы увидите подтверждающее сообщение. Если есть ошибки, Nginx отобразит подробную информацию, чтобы помочь вам устранить неполадки.
7. Перезапустите Nginx
После подтверждения конфигурации перезапустите Nginx, чтобы применить изменения:
sudo systemctl restart nginx
8. Доступ к веб-сайтам
Если доменные имена указаны на вашем сервере, вы должны иметь возможность получить доступ к каждому сайту, посетив его:
- http://example1.com
- http://example2.com
Для локального тестирования вы можете отредактировать файл /etc/hosts, чтобы сопоставить доменные имена с IP-адресом вашего сервера. Добавьте такие записи, как:
127.0.0.1 example1.com 127.0.0.1 example2.com
Сохраните и закройте файл, а затем попробуйте зайти на сайты в браузере.
9. Включение HTTPS для каждого сайта (необязательно)
Для безопасных соединений вы можете установить SSL-сертификаты с помощью Let’s Encrypt. Чтобы включить HTTPS:
Установите certbot:
sudo apt install certbot python3-certbot-nginx
Выполните следующую команду, чтобы получить и настроить SSL-сертификаты для каждого домена:
sudo certbot --nginx -d example1.com -d www.example1.com
sudo certbot --nginx -d example2.com -d www.example2.com
Следуйте подсказкам, и Certbot автоматически настроит HTTPS в конфигурации Nginx.
Заключение
Настроив виртуальные хосты в Nginx на Ubuntu, вы сможете размещать на одном сервере несколько сайтов, каждый со своей конфигурацией и содержимым. Такая настройка эффективна и масштабируема, что делает Nginx отличным выбором для размещения нескольких сайтов на одном сервере.