Поиск по сайту:

Как настроить виртуальные хосты на основе имен и IP (серверные блоки) с помощью NGINX


За относительно короткий период времени с момента его разработки и доступности (чуть более 10 лет) Nginx продемонстрировал устойчивый и устойчивый рост среди веб-серверов благодаря своей высокой производительности и низкому использованию памяти.

Поскольку Nginx является бесплатным программным обеспечением с открытым исходным кодом, его используют тысячи администраторов веб-серверов по всему миру, причем не только на серверах Linux и *nix, но и в Microsoft Windows.

Не пропустите: виртуальный хостинг Apache на основе имен и IP-адресов

Для тех из нас, кто больше всего привык к Apache, Nginx может потребовать довольно крутой кривой обучения (по крайней мере, так было в моем случае), но это, безусловно, окупится, как только вы настроите пару сайтов и начните видеть статистику трафика и использования ресурсов.

В этой статье мы объясним, как использовать Nginx для настройки виртуального хостинга на основе имени и на основе IP в CentOS/RHEL. 7 и Debian 8 и производные, начиная с Ubuntu 15.04 и ее дочерних версий.

Наш сценарий тестирования для этой статьи выглядит следующим образом:

  1. Операционная система: сервер Debian 8 Jessie [IP 192.168.0.25]
  2. Шлюз: маршрутизатор [IP 192.168.0.1]
  3. Веб-сервер: Nginx 1.6.2-5.
  4. Фиктивные домены: www.tecmintlovesnginx.com и www.nginxmeanspower.com.

Установка веб-сервера Nginx

Если вы еще этого не сделали, установите Nginx, прежде чем продолжить. Если вам нужна помощь, чтобы начать работу, быстрый поиск nginx на этом сайте выдаст несколько статей на эту тему. Нажмите на значок лупы вверху этой страницы и найдите ключевое слово nginx. Если вы не знаете, как искать статьи на этом сайте, не волнуйтесь: мы добавили ссылки на статьи о nginx, просто пройдите и установите их в соответствии с вашими дистрибутивами Linux.

  1. Установите и скомпилируйте Nginx из исходников в RHEL/CentOS 7.
  2. Установите веб-сервер Nginx в Debian 8
  3. Установите Nginx с MariaDB и PHP/PHP-FPM в Fedora 23.
  4. Установите веб-сервер Nginx на сервер/рабочий стол Ubuntu 15.10
  5. Защита паролем каталогов веб-сайтов Nginx

Тогда будьте готовы продолжить оставшуюся часть этого урока.

Создание виртуальных хостов на основе имен в Nginx

Как я уверен, вы уже знаете, виртуальный хост — это веб-сайт, который обслуживается Nginx на одном облачном VPS или физическом сервере. Однако в документации Nginx вместо этого вы встретите термин "серверные блоки", но по сути это одно и то же, называемое разными именами.

Первым шагом по настройке виртуальных хостов является создание одного или нескольких серверных блоков (в нашем случае мы создадим два, по одному для каждого фиктивного домена) в основном файле конфигурации (/etc/nginx/nginx.conf ). ) или внутри /etc/nginx/sites-available.

Хотя имя файлов конфигурации в этом каталоге (sites-available) можно задать любое, рекомендуется использовать имена доменов, и, кроме того, мы решили добавить Расширение .conf, указывающее, что это файлы конфигурации.

Эти серверные блоки могут быть относительно сложными, но в своей базовой форме они состоят из следующего контента:

В /etc/nginx/sites-available/tecmintlovesnginx.com.conf:

server {  
    listen       80;  
    server_name  tecmintlovesnginx.com www.tecmintlovesnginx.com;
    access_log  /var/www/logs/tecmintlovesnginx.access.log;  
    error_log  /var/www/logs/tecmintlovesnginx.error.log error; 
        root   /var/www/tecmintlovesnginx.com/public_html;  
        index  index.html index.htm;  
}

В /etc/nginx/sites-available/nginxmeanspower.com.conf:

server {  
    listen       80;  
    server_name  nginxmeanspower.com www.nginxmeanspower.com;
    access_log  /var/www/logs/nginxmeanspower.access.log;  
    error_log  /var/www/logs/nginxmeanspower.error.log error;
    root   /var/www/nginxmeanspower.com/public_html;  
    index  index.html index.htm;  
}

Вы можете использовать приведенные выше блоки, чтобы начать настройку виртуальных хостов, или можете создать файлы с базовым скелетом из /etc/nginx/sites-available/default (Debian >) или /etc/nginx/nginx.conf.default (CentOS).

После копирования измените их разрешения и владельца:

chmod 660  /etc/nginx/sites-available/tecmintlovesnginx.com.conf
chmod 660  /etc/nginx/sites-available/nginxmeanspower.com.conf

Debian и производные

chgrp www-data  /etc/nginx/sites-available/tecmintlovesnginx.com.conf
chgrp www-data  /etc/nginx/sites-available/nginxmeanspower.com.conf

CentOS и RHEL

chgrp nginx  /etc/nginx/sites-available/tecmintlovesnginx.com.conf
chgrp nginx  /etc/nginx/sites-available/nginxmeanspower.com.conf

Когда вы закончите, вам следует удалить файл примера или переименовать его в другое имя, чтобы избежать путаницы и конфликтов.

Обратите внимание, что вам также потребуется создать каталог для журналов (/var/www/logs) и предоставить пользователю Nginx (nginx или www-data , в зависимости от того, используете ли вы CentOS или Debian) разрешения на чтение и запись:

mkdir /var/www/logs
chmod -R 660 /var/www/logs
chgrp <nginx user> /var/www/logs

Теперь виртуальные хосты необходимо включить, создав символическую ссылку на этот файл в каталоге с поддержкой сайтов:

ln -s /etc/nginx/sites-available/tecmintlovesnginx.com.conf /etc/nginx/sites-enabled/tecmintlovesnginx.com.conf
ln -s /etc/nginx/sites-available/nginxmeanspower.com.conf /etc/nginx/sites-enabled/nginxmeanspower.com.conf

Затем создайте образец HTML-файла с именем index.html внутри /var/www//public_html для каждого из виртуальных хостов (замените по мере необходимости). При необходимости измените следующий код:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Tecmint loves Nginx</title>
  </head>
  <body>
  <h1>Tecmint loves Nginx!</h1>
  </body>
</html>

Наконец, проверьте конфигурацию Nginx и запустите веб-сервер. Если в конфигурации есть ошибки, вам будет предложено их исправить:

nginx -t && systemctl start nginx

и добавьте следующие записи в файл /etc/hosts на своем локальном компьютере в качестве базовой стратегии разрешения имен:

192.168.0.25 tecmintlovesnginx.com
192.168.0.25 nginxmeanspower.com

Затем запустите веб-браузер и перейдите по URL-адресам, указанным выше:

Чтобы добавить больше виртуальных хостов в Nginx, просто повторите шаги, описанные выше, столько раз, сколько необходимо.

Виртуальные хосты на базе IP в Nginx

В отличие от виртуальных хостов на основе имени, где все хосты доступны через один и тот же IP-адрес, для виртуальных хостов на основе IP требуется другой IP:порт комбинация каждого.

Это позволяет веб-серверу возвращать разные сайты в зависимости от IP-адреса и порта, на который получен запрос. Поскольку именованные виртуальные хосты дают нам преимущество совместного использования IP-адреса и порта, они являются стандартом для веб-серверов общего назначения и должны быть предпочтительной настройкой, если только ваша установленная версия Nginx не поддерживает указание имени сервера. (SNI), либо потому, что это ДЕЙСТВИТЕЛЬНО устаревшая версия, либо потому, что она была скомпилирована без параметра компиляции –with-http_ssl_module.

Если,

nginx -V

не возвращает выделенные параметры ниже:

вам нужно будет обновить версию Nginx или перекомпилировать ее, в зависимости от исходного метода установки. Для компиляции Nginx следуйте статье ниже:

  1. Установите и скомпилируйте Nginx из исходников в RHEL/CentOS 7.

Предполагая, что все готово, мы должны отметить, что еще одним обязательным условием для виртуальных хостов на основе IP является наличие отдельных IP-адресов – либо путем назначения их отдельным сетевым интерфейсам, либо посредством использования виртуальных хостов. IP-адреса (также известные как псевдонимы IP).

Чтобы выполнить псевдонимы IP в Debian (при условии, что вы используете eth0), отредактируйте /etc/network/interfaces следующим образом:

Debian и производные

auto eth0:1
iface eth0:1 inet static
        address 192.168.0.25
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
auto eth0:2
iface eth0:2 inet static
        address 192.168.0.26
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1

В приведенном выше примере мы создаем два виртуальных сетевых адаптера из eth0: eth0:1 (192.168.0.25) и eth0:2 (192.168.0.26).

CentOS и RHEL

В CentOS переименуйте /etc/sysconfig/network-scripts/ifcfg-enp0s3 в ifcfg-enp0s3:1 и сделайте копию как ifcfg-enp0s3:2, а затем просто измените следующие строки соответственно:

DEVICE="enp0s3:1"
IPADDR=192.168.0.25

и

DEVICE="enp0s3:2"
IPADDR=192.168.0.26

После этого перезапустите сетевую службу:

systemctl restart networking

Затем внесите следующие изменения в блоки сервера, определенные ранее в этой статье:

В /etc/nginx/sites-available/tecmintlovesnginx.com.conf:

listen 192.168.0.25:80

В /etc/nginx/sites-available/nginxmeanspower.com.conf:

listen 192.168.0.26:80

Наконец, перезапустите Nginx, чтобы изменения вступили в силу.

systemctl restart nginx

и не забудьте соответствующим образом обновить локальный /etc/hosts:

192.168.0.25 tecmintlovesnginx.com
192.168.0.26 nginxmeanspower.com

Таким образом, каждый запрос, сделанный на 192.168.0.25 и 192.168.0.26 через порт 80, вернет tecmintlovesnginx.com и nginxmeanspower.com соответственно:

Как вы можете видеть на изображениях выше, теперь у вас есть два виртуальных хоста на базе IP, использующие единственный сетевой адаптер на вашем сервере с двумя разными псевдонимами IP.

Резюме

В этом руководстве мы объяснили, как настроить виртуальные хосты на основе имени и на основе IP в Nginx. Хотя вы, вероятно, захотите использовать первый вариант, важно знать, что другой вариант все еще доступен, если он вам понадобится — просто убедитесь, что вы приняли это решение после рассмотрения фактов, изложенных в этом руководстве.

Кроме того, вы можете добавить документацию Nginx в закладки, так как стоит часто обращаться к ней при создании серверных блоков (вот оно — мы сейчас говорим на языке Nginx) и их настройке. Вы не поверите всем возможностям, доступным для настройки и настройки этого выдающегося веб-сервера.

Как всегда, не стесняйтесь написать нам, используя форму ниже, если у вас есть какие-либо вопросы или комментарии по поводу этой статьи. Мы с нетерпением ждем вашего ответа и будем рады вашим отзывам об этом руководстве.