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

Как настроить серверные блоки Nginx (виртуальные хосты) в Ubuntu 14.04 LTS


Введение

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

В этом руководстве мы обсудим, как настроить серверные блоки в Nginx на сервере Ubuntu 14.04.

Предпосылки

В этом руководстве мы будем использовать пользователя без полномочий root с привилегиями sudo. Если у вас нет такого настроенного пользователя, вы можете создать его, выполнив шаги 1–4 в нашем руководстве по начальной настройке сервера Ubuntu 14.04.

Вам также потребуется установить Nginx на вашем сервере. Если вам нужен полный стек LEMP (Linux, Nginx, MySQL и PHP) на вашем сервере, вы можете следовать нашему руководству по настройке стека LEMP в Ubuntu 14.04. Если вам нужен только Nginx, вы можете установить его, набрав:

sudo apt-get update
sudo apt-get install nginx

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

В демонстрационных целях мы собираемся настроить два домена с нашим сервером Nginx. В этом руководстве мы будем использовать доменные имена example.com и test.com.

Вы можете найти руководство по настройке доменных имен с помощью DigitalOcean здесь. Если у вас нет двух запасных доменных имен для игры, используйте фиктивные имена, а позже мы покажем вам, как настроить локальный компьютер для проверки вашей конфигурации.

Шаг первый — настроить новые корневые каталоги документов

По умолчанию в Nginx в Ubuntu 14.04 по умолчанию включен один серверный блок. Он настроен для подачи документов из каталога по адресу:

/usr/share/nginx/html

Мы не будем использовать значение по умолчанию, так как проще работать с вещами в каталоге /var/www. Пакет Ubuntu Nginx по умолчанию не использует /var/www в качестве корня документа из-за политики Debian в отношении пакетов, использующих /var/www.

Поскольку мы являемся пользователями, а не сопровождающими пакетов, мы можем сказать Nginx, что именно здесь мы хотим, чтобы наши корни документов были. В частности, нам нужен каталог для каждого из наших сайтов в каталоге /var/www, и у нас будет каталог под ним с именем html для хранения наших реальных файлов.

Во-первых, нам нужно создать необходимые каталоги. Мы можем сделать это с помощью следующей команды. Флаг -p указывает mkdir создать все необходимые родительские каталоги по пути:

  1. sudo mkdir -p /var/www/example.com/html
  2. sudo mkdir -p /var/www/test.com/html

Теперь, когда вы создали свои каталоги, нам нужно передать право собственности нашему обычному пользователю. Мы можем использовать переменную окружения $USER, чтобы заменить учетную запись пользователя, в которую мы вошли в данный момент. Это позволит нам создавать файлы в этом каталоге, не позволяя нашим посетителям создавать контент.

  1. sudo chown -R $USER:$USER /var/www/example.com/html
  2. sudo chown -R $USER:$USER /var/www/test.com/html

Разрешения наших корневых веб-сайтов уже должны быть правильными, если вы не изменили значение umask, но мы можем убедиться, набрав:

  1. sudo chmod -R 755 /var/www

Наша структура каталогов теперь настроена, и мы можем двигаться дальше.

Шаг второй — создайте образцы страниц для каждого сайта

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

Создайте файл index.html в своем первом домене:

  1. nano /var/www/example.com/html/index.html

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

<html>
    <head>
        <title>Welcome to Example.com!</title>
    </head>
    <body>
        <h1>Success!  The example.com server block is working!</h1>
    </body>
</html>

Сохраните и закройте файл, когда закончите.

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

  1. cp /var/www/example.com/html/index.html /var/www/test.com/html/

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

  1. nano /var/www/test.com/html/index.html
<html>
    <head>
        <title>Welcome to Test.com!</title>
    </head>
    <body>
        <h1>Success!  The test.com server block is working!</h1>
    </body>
</html>

Сохраните и закройте этот файл, когда закончите. Теперь у вас есть несколько страниц для показа посетителям наших двух доменов.

Шаг третий — создайте файлы блоков сервера для каждого домена

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

По умолчанию Nginx содержит один серверный блок с именем default, который мы можем использовать в качестве шаблона для наших собственных конфигураций. Мы начнем с разработки блока сервера нашего первого домена, который затем скопируем для нашего второго домена и внесем необходимые изменения.

Создайте файл первого блока сервера

Как упоминалось выше, мы создадим наш первый файл конфигурации блока сервера, скопировав файл по умолчанию:

  1. sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com

Теперь откройте новый файл, который вы создали, в текстовом редакторе с привилегиями root:

  1. sudo nano /etc/nginx/sites-available/example.com

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

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name localhost;

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

Во-первых, нам нужно взглянуть на директивы listen. Только один из наших серверных блоков может иметь спецификацию default_server. Это указывает, какой блок должен обрабатывать запрос, если запрошенный server_name не соответствует ни одному из доступных серверных блоков.

В конечном итоге мы собираемся отключить конфигурацию блока сервера по умолчанию, поэтому мы можем поместить параметр default_server либо в этот блок сервера, либо в блок для другого нашего сайта. Я оставлю параметр default_server включенным в этом блоке сервера, но вы можете выбрать то, что лучше всего подходит для вашей ситуации.

Следующее, что нам нужно настроить, — это корень документа, указанный в директиве root. Укажите его на созданный вами корень документа сайта:

root /var/www/example.com/html;

Примечание. Каждый оператор Nginx должен заканчиваться точкой с запятой (;), поэтому проверяйте каждую строку, если у вас возникли проблемы.

Затем мы хотим изменить server_name, чтобы он соответствовал запросам для нашего первого домена. Мы можем дополнительно добавить любые псевдонимы, которые мы хотим сопоставить. Мы добавим псевдоним www.example.com, чтобы продемонстрировать:

server_name example.com www.example.com;

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

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

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

    server_name example.com www.example.com;

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

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

Создайте файл второго блока сервера

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

  1. sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/test.com

Откройте новый файл с привилегиями root в вашем редакторе:

  1. sudo nano /etc/nginx/sites-available/test.com

В этом новом файле нам придется снова взглянуть на директивы listen. Если вы оставили параметр default_server включенным в последнем файле, вам придется удалить его в этом файле. Кроме того, вам придется избавиться от опции ipv6only=on, так как ее можно указать только один раз для комбинации адрес/порт:

listen 80;
listen [::]:80;

Настройте директиву root документа, чтобы она указывала на корень документа вашего второго домена:

root /var/www/test.com/html;

Настройте server_name, чтобы он соответствовал вашему второму домену и любым псевдонимам:

server_name test.com www.test.com;

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

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

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

    server_name test.com www.test.com;

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

Когда вы закончите, сохраните и закройте файл.

Шаг четвертый — включите блокировку сервера и перезапустите Nginx

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

Мы можем сделать это, создав символические ссылки из этих файлов на каталог sites-enabled, из которого Nginx читает во время запуска.

Мы можем создать эти ссылки, набрав:

  1. sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
  2. sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/

Эти файлы теперь находятся во включенном каталоге. Однако файл блока сервера по умолчанию, который мы использовали в качестве шаблона, в настоящее время также включен и будет конфликтовать с нашим файлом, в котором установлен параметр default_server.

Мы можем отключить файл блока сервера по умолчанию, просто удалив символическую ссылку. Он по-прежнему будет доступен для ссылки в каталоге sites-available, но не будет прочитан Nginx при запуске:

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

Нам также нужно очень быстро настроить один параметр в файле конфигурации Nginx по умолчанию. Откройте его, набрав:

  1. sudo nano /etc/nginx/nginx.conf

Нам просто нужно раскомментировать одну строку. Найдите и удалите комментарий из этого:

server_names_hash_bucket_size 64;

Теперь мы готовы перезапустить Nginx, чтобы изменения вступили в силу. Вы можете сделать это, набрав:

  1. sudo service nginx restart

Теперь Nginx должен обслуживать оба ваших доменных имени.

Шаг пятый — настройте файл локальных хостов (необязательно)

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

Это не позволит другим посетителям правильно просматривать ваш сайт, но даст вам возможность получить доступ к каждому сайту независимо и протестировать вашу конфигурацию. В основном это работает путем перехвата запросов, которые обычно отправляются в DNS для разрешения доменных имен. Вместо этого мы можем установить IP-адреса, на которые мы хотим, чтобы наш локальный компьютер обращался, когда мы запрашиваем доменные имена.

Убедитесь, что во время этих шагов вы работаете на своем локальном компьютере, а не на своем VPS-сервере. Для этого вам потребуется root-доступ, членство в административной группе или иная возможность редактировать системные файлы.

Если вы находитесь дома на компьютере Mac или Linux, вы можете отредактировать нужный файл, набрав:

  1. sudo nano /etc/hosts

Если вы работаете в Windows, вы можете найти инструкции по изменению файла hosts здесь.

Вам нужен общедоступный IP-адрес вашего сервера и домены, которые вы хотите направить на сервер. Если предположить, что общедоступный IP-адрес моего сервера — 111.111.111.111, строки, которые я добавлю в свой файл, будут выглядеть примерно так:

127.0.0.1   localhost
127.0.0.1   guest-desktop
111.111.111.111 example.com
111.111.111.111 test.com

Это перехватит любые запросы для example.com и test.com и отправит их на ваш сервер, что нам и нужно, если мы на самом деле не владеем доменами, которые мы используют.

Сохраните и закройте файл, когда закончите.

Шаг шестой — проверьте свои результаты

Теперь, когда вы все настроили, вы должны проверить правильность работы ваших серверных блоков. Вы можете сделать это, посетив домены в своем веб-браузере:

http://example.com

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

Если вы посетите свое второе доменное имя, вы должны увидеть немного другой сайт:

http://test.com

Если оба этих сайта работают, вы успешно настроили два независимых блока серверов с Nginx.

На этом этапе, если вы изменили файл hosts на локальном компьютере для проверки, вы, вероятно, захотите удалить добавленные строки.

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

Заключение

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