Виртуальные хосты в Nginx также называются блоками server. Эти блоки используются для обслуживания нескольких индивидуальных доменов на одном сервере.
Данное руководство покажет, как настроить виртуальные хосты Nginx на сервере Ubuntu 16.04.
Требования
- Не-root пользователь с доступом sudo (о настройке такого пользователя – в этой статье).
- Предварительно установленный веб-сервер Nginx. Инструкции по установке Nginx можно найти здесь. Чтобы установить более надёжную платформу для веб-сервера, читайте руководство «Установка стека LEMP в Ubuntu 16.04».
Кроме того, для выполнения предложенных в руководстве примеров нужно иметь два доменных имени; в руководстве используются условные домены example.com и test.com. Не забудьте заменить их своими доменными именами.
Если у вас нет доменных имён, которые можно использовать для тестирования настроек, укажите фиктивные домены. В руководстве есть специальный раздел, объясняющий, как протестировать сайты при помощи локальной машины.
Настройка DNS серверов на компьютере с Windows, для начинающих
1: Каталоги Document Root
По умолчанию в Ubuntu 16.04 включен один стандартный виртуальный хост Nginx, который обслуживает документы из каталога /var/www/html.
Для обслуживания нескольких сайтов нужно создать дополнительные каталоги. Каталог /var/www/html будет использоваться в качестве каталога по умолчанию, который будет обслуживаться, если запрос клиента не соответствует ни одному из других сайтов.
Создайте структуру каталогов в /var/www для каждого отдельного сайта. Весть текущий контент нужно поместить в каталог html. Используйте следующую команду; флаг –p создаст все необходимые родительские каталоги.
sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/test.com/html
Создав все необходимые каталоги, передайте права на них текущему пользователю с доступом к sudo.
Примечание: В зависимости от требований сервера вам может потребоваться повторно настроить права доступа или права собственности на папки, чтобы разрешить доступ к пользователю www-data. В этом, как правило, часто нуждаются динамические сайты. Конечно, привилегии доступа полностью зависят от конфигурации сервера.
Используйте переменную окружения $USER, чтобы задать текущего пользователя. Это позволит создавать файлы в этих каталогах.
sudo chown -R $USER:$USER /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/test.com/html
Теперь права на эти каталоги установлены верно, если ранее значение umask не было изменено. Это можно проверить при помощи команды:
sudo chmod -R 755 /var/www
2: Создание страниц для сайтов
Создав необходимую структуру каталогов, можно переходить к созданию стандартных страниц сайтов, чтобы иметь возможность просмотреть добавленный контент.
Создайте страницу index.html для первого сайта.
В этот файл вставьте следующий код; эта простая базовая страница сообщит, какой из двух сайтов открыт.
Как настроить сервер майнкрафт по no ip и добавить его в мониторинг серверов? — Ответ тут!
Welcome to Example.com!
Success! The example.com server block is working!
Сохраните и закройте файл.
Файл для второго сайта будет почти таким же, потому можно просто скопировать только что созданный файл, а затем отредактировать его.
cp /var/www/example.com/html/index.html /var/www/test.com/html/
Откройте этот файл в текстовом редакторе:
Откорректируйте данные, указав информацию о втором сайте:
Welcome to Test.com!
Success! The test.com server block is working!
Сохраните и закройте файл.
Теперь стандартные страницы сайтов готовы.
3: Создание виртуальных хостов
Итак, теперь файловая структура и страницы, обслуживающие контент, готовы к работе. Приступайте к созданию блоков server для Nginx.
По умолчанию Nginx содержит один блок server по имени default, который можно использовать в качестве шаблона.
Блок server для первого сайта
Итак, скопируйте стандартный файл, чтобы создать первый блок server.
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com
Откройте новый файл в текстовом редакторе:
sudo nano /etc/nginx/sites-available/example.com
Не учитывая закомментированных строк, этот файл выглядит так:
server listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / try_files $uri $uri/ =404;
>
>
Сначала нужно разобраться с директивами listen. Спецификация default_server может быть действительна только для одного виртуального хоста. Она указывает, какой из виртуальных хостов должен обслуживать запрос, если запрашиваемый server_name не совпадает ни с одним из существующих виртуальных хостов.
Добавьте опцию default_server в директиву listen одного из своих сайтов. Также можно оставить эту опцию в файле стандартного виртуального хоста, который будет обслуживать каталог /var/www/html, если запрашиваемый хост не может быть найден.
В данном руководстве стандартный виртуальный хост будет обслуживать несовпадающие запросы, потому директиву default_server нужно удалить из него и добавить в файл другого хоста.
Примечание: Чтобы убедиться, что опция default_server включена только в одном файле виртуального хоста, введите:
grep -R default_server /etc/nginx/sites-enabled/
Если такие записи в раскомментированном виде находятся в нескольких файлах (указывается в последнем столбце), веб-сервер пожалуется на ошибку.
Далее нужно указать каталог document root, отредактировав директиву root.
server listen 80;
listen [::]:80;
root /var/www/example.com/html;
>
Затем нужно отредактировать server_name, указав доменное имя (в данном случае – домен первого сайта). Также можно добавить несколько алиасов (например, www.example.com). В результате получится:
server listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / try_files $uri $uri/ =404;
>
>
Базовая настройка виртуального хоста завершена.
Блок server для второго сайта
Итак, базовый код блока server готов. Файл блока server можно использовать в качестве шаблона для блока второго сайта. Скопируйте этот файл:
sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/test.com
Откройте новый файл с привилегиями root:
sudo nano /etc/nginx/sites-available/test.com
Обратите внимание на директиву listen. Если опция default_server была включена в предыдущий файл, удалите её из этого файла. Также нужно откорректировать значение директивы root (укажите document root второго сайта) и server_name (укажите доменное имя и все алиасы).
В результате файл будет выглядеть так:
server listen 80;
listen [::]:80;
root /var/www/test.com/html;
index index.html index.htm index.nginx-debian.html;
server_name test.com www.test.com;
location / try_files $uri $uri/ =404;
>
>
Сохраните и закройте файл.
4: Включение виртуальных хостов
Теперь виртуальные хосты готовы, но их нужно активировать.
Для этого нужно создать символьные ссылки из этих файлов в каталог sites-enabled, который читается веб-сервером Nginx во время запуска.
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/
Теперь эти файлы в каталоге sites-enabled. На данный момент у вас есть три виртуальных блока, которые смогут отвечать на запросы согласно директивам listen и server_name.
- example.com: файл для сайта example.com и его алиасов.
- test.com: файл для сайта test.com и его алиасов.
- default: стандартный файл, который будет отвечать на запросы, не соответствующие ни первому, ни второму сайту.
Чтобы избежать потенциальных проблем с памятью, которые могут возникнуть из-за дополнительных имён сервера, отредактируйте файл /etc/nginx/nginx.conf:
sudo nano /etc/nginx/nginx.conf
Найдите директиву server_names_hash_bucket_size и раскомментируйте её:
http . . .
server_names_hash_bucket_size 64;
. . .
>
Сохраните и закройте файл.
Проверьте синтаксис на наличие ошибок:
Если ошибок нет, перезапустите Nginx, чтобы обновить настройки:
sudo systemctl restart nginx
Теперь Nginx обслуживает два домена.
5: Настройка локальных хостов (опционально)
Если вместо настоящих доменных имён вы использовали фиктивные имена, вы можете испытать новые виртуальные хосты, не подключаясь при этом к доменному имени. Для этого нужно настроить на компьютере локальные хосты.
Это не позволит другим посетителям просматривать сайт, но даст вам возможность проверить работу и настройки каждого сайта. Этот метод работает путем перехвата запросов, которые, как правило, поступают в DNS для разрешения доменных имен. Вместо этого можно указать IP-адреса, которые будут использоваться локальным компьютером, при поступлении запросов к доменным именам.
Примечание: прежде чем приступить к выполнению данного раздела, убедитесь, что вы находитесь на компьютере, а не на сервере. Для выполнения данного раздела нужно иметь root-права и состоять в административной группе, чтобы иметь возможность редактировать системные файлы.
В системах Mac или Linux войдите как root-пользователь (su) и откройте файл hosts:
sudo nano /etc/hosts
При использовании Windows обратитесь к сайту Microsoft.
На данном этапе понадобится внешний IP-адрес и домены, которые нужно направить на сервер. Допустим, внешний IP-адрес сервера 111.111.111.111; в таком случае строки будут выглядеть так:
127.0.0.1 localhost
. . .
111.111.111.111 example.com www.example.com
111.111.111.111 test.com www.test.com
Это будет перехватывать запросы к example.com и test.com и передавать их на сервер.
Сохраните и закройте файл.
6: Тестирование
Теперь нужно протестировать работу виртуальных хостов. Для этого посетите домены в браузере:
На экране появится сообщение:
Success! The example.com server block is working!
Посетите второй домен:
На экране должно появиться сообщение:
Success! The test.com server block is working!
Если веб-сервер ответил на запросы, значит, всё работает должным образом.
Если файл hosts на локальном компьютере был отредактирован, на этом этапе нужно удалить добавленные в него строки.
Количество виртуальных хостов, которое можно разместить на одном сервере, ограничивается только ресурсами самого сервера. Чтобы виртуальный хост, просто повторите весь вышеописанный процесс.
Источник: www.8host.com
Как настроить DNS и привязать домен к IP
Многие наверно хотят развернуть веб-сервер или игровой портал на собственном компьютере. Но, судя по всему, такая процедура как привязка доменного имени к IP-адресу вызывает у многих затруднения.
Привязать домен к IP очень просто, и делается это за 2-3 минуты максимум. Для этого нам понадобится любой домен 2-го уровня, статичный выделенный IP-адрес и наличие доступа к серверу из внешней сети.
Я буду показывать процедуру привязки на примере панели управления 2domains.ru, но такая функция есть почти у всех доменных регистраторов. Заходим в список доменов — сверху вкладка «Домены» → »Мои домены».
Выбираем нужный нам домен, затем открываем выпадающих список и выбираем там «Изменить DNS-сервера».
Включаем опцию «Использовать DNS регистратора». Сохраняем.
Затем возвращаемся к списку доменов. Кликаем по ссылке с именем нужного домена. В появившемся окне жмем «Управление зоной DNS».
Для привязки доменного имени к IP-адресу нам нужно создать запись типа «A». Если нужно добавить алиас для домена. например префикс www), то создадим еще и «CNAME»-запись. Подробнее о DNS-записях можно почитать здесь.
Ждем, пока обновится DNS-кеш. У меня обычно на это уходит минут 15-20, но возможно более долгое обновление — в редких случаях, до трех суток.
Источник: code-live.ru
Доступ к сайту на NGINX только по доменному имени
Доброго времени суток, уважаемые читатели. Сегодня тема статьи: «Доступ к сайту на NGINX только по доменному имени». Не для кого не секрет, что по умолчанию любой сайт в интернете, доступен по своему доменному имени, или по ip-адресу.
Возможные проблемы при открытом доступе к сайту по ip-адресу
Обычные пользователи для доступа к сайту используют доменное имя, а ip-адреса сайтов, зачастую используется злоумышленниками, при сканировании сетей на предмет открытых портов, и уязвимостей. Поэтому полезно настраивать доступ к сайту, только по доменному имени.
- Из личного опыта могу привести пример того, как ip-адрес моего сайта был указан на постороннем DNS-сервере.
- С какой целью и кем, мне не известно. Но в итоге, при вводе адреса постороннего сайта, браузер открывал главную страницу моего сайта, а в адресной строке было постороннее доменное имя. А при вводе адреса постороннего сайта с приставкой https, появлялось сообщение с предупреждением.
- При просмотре сертификата выяснялось, что это сертификат моего сайта.
- Если проигнорировать сообщение и перейти на сайт, то также открывалась главная страница моего сайта, и в адресной строке указывалось постороннее доменное имя.
Это не была копия моего сайта, так как все ссылки в итоге вели на мой сайт, просто сайт стал доступен по постороннему доменному имени.
- Какие в такой ситуации могут возникнуть проблемы, спросите Вы…
- Давайте рассуждать логично. Если подобное сделано не по причине ошибки, то возможно есть злой умысел.
- Например у постороннего доменного имени, может быть плохая репутация, и так как Ваш сайт будет каким-то образом позиционироваться с этим доменным именем, плохая репутация может отразиться и на Вашем сайте. А представьте ситуацию, что будет несколько подобных доменных имён с плохой репутацией, и все будут позиционироваться с Вашим сайтом…
- И ещё момент. Как на подобную ситуацию отреагируют поисковики? Получаются какие-то непонятные редиректы…
- Делайте выводы сами!
Запрет доступа к сайту по ip-адресу
- Как можно запретить доступ к сайту по ip-адресу? Есть несколько способов, в частности создание сайта-заглушки…
- Но я расскажу, о наипростейшем способе. Вам достаточно добавить несколько строчек в конфигурационный файл /etc/nginx/nginx.conf, либо в файл конфигурации самого сайта.
- Если Вы будете добавлять код в файл /etc/nginx/nginx.conf, то нужно произвести добавление кода в секцию http, до строчки подключения файлов конфигураций сайтов.
- В случае, если Вы будете добавлять код непосредственно в файл конфигурации сайта, то необходимо произвести добавление кода, выше всех других секций конфигурации.
Код должен быть добавлен таким образом, чтобы считывался сервером самым первым, из секций server .
- Принцип конфигурации заключается в том, что мы создаём настройку сервера по умолчанию, из которой будет следовать, что получая запросы не подходящие под имеющиеся настройки сайтов (в частности доменные имена), он будет реагировать соответствующим образом.
- В моем примере NGINX будет сбрасывать соединения (ответ 444), Вы можете использовать другой ответ сервера, на своё усмотрение. Например 403, или 404…
Запрет доступа по 80 порту
- Если на сайте Вы не используете SSL сертификатов, и Ваш сайт доступен только по 80 порту, то достаточно добавить одну секцию.
server <
listen 80 default_server;
server_name _;
return 444;
>
- Не забудьте проверить конфигурацию, и перезапустить NGINX.
# nginx -t
# nginx -s reload
- Если всё сделано правильно, то при попытке доступа к Вашему сайту по ip-адресу, в моём примере, ответ будет таким.
Запрет доступа по 443 порту
- Если Вы используете SSL сертификаты, и Ваш сайт доступен также по 443 порту, то нужно добавить секцию представленную выше, и вторую секцию специально для 443 порта.
Обратите внимание, я не стал указывать всех настроек SSL, на разных сайтах они могут отличаться. Вам нужно найти в своей конфигурации всё что связанно с SSL, то есть все строчки начинающиеся с ssl_ и вставить их после server_name _;
server
- Коме того, обратите внимание на строчку:
add_header Strict-Transport-Security ‘max-age=31536000’;
- У Вас может быть по другому, сделайте так, как настроено у Вас.
- В итоге, нужно обязательно проверить конфигурацию.
# nginx -t
Если есть ошибки, нужно их найти и исправить, а если всё в порядке, то можно перезапустить сервер.
# nginx -s reload
- Если всё сделано правильно, то при попытке доступа к Вашему сайту по ip-адресу, с использованием HTTPS, откроется окно с предупреждением как на первой картинке этой статьи, но при переходе, в моём примере, соединение будет сброшено сервером.
Как видите, ничего сложного, и времени потрачено всего ничего.
Сегодня мы рассмотрели тему: «Доступ к сайту на NGINX только по доменному имени». Научились закрывать доступ к сайту по ip-адресу. Смотрите также
Источник: aeb-blog.ru