Как настроить серверные блоки Nginx в CentOS 7

Вступление

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

Nginx используетserver blocks для управления конфигурациями для отдельного сайта или домена. Блоки серверов позволяют одному серверу размещать несколько доменов или интерфейсов с помощью соответствующей системы. Это относится ко всем, кто хочет разместить более одного сайта на одном VPS.

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

В этом руководстве мы рассмотрим, как настроить серверные блоки Nginx на CentOS 7 VPS. В ходе этого процесса вы узнаете, как предоставлять разный контент разным посетителям в зависимости от того, какие домены они запрашивают.

Предпосылки

Прежде чем вы начнете с этим руководством, необходимо выполнить несколько шагов.

Вам понадобится доступ к серверу CentOS 7 с пользователем без полномочий root с правамиsudo. Если вы еще не настроили это, вы можете запуститьCentOS 7 initial server setup guide, чтобы создать эту учетную запись.

Вам также нужно будет установить Nginx, чтобы настроить для него блоки серверов. Если вам нужен весь стек LEMP (Linux, Nginx, MySQL и PHP) на вашем сервере, вы можете следовать нашему руководству поsetting up a LEMP stack in CentOS 7. Если вам нужен только Nginx, вы можете установить его через репозиторий Nginxyum:

Сначала добавьте репозиторий Nginx в список источников программного обеспечения вашего сервера.

sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

Теперь вы можете использоватьyum для загрузки и установки Nginx.

sudo yum install nginx

После выполнения этих шагов войдите в систему под учетной записью пользователя без полномочий root через SSH и продолжайте обучение.

Note: Пример конфигурации в этом руководстве будет создавать один серверный блок дляexample.com, а другой - дляexample2.com. На них будут ссылаться на протяжении всего руководства, но вы должны заменить свои собственные домены или значения, следуя далее. Чтобы узнать, как настроить свои доменные имена с помощью DigitalOcean, следуйтеthis link.

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

[[step-one -—- create-the-directory-structure]] == Шаг первый - Создание структуры каталогов

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

Нашdocument root (каталог верхнего уровня, который Nginx просматривает для поиска контента для обслуживания) будет настроен на отдельные каталоги в каталоге/var/www. Здесь мы создадим каталог для каждого из блоков сервера, которые мы планируем создать.

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

Мы можем создать эти каталоги с помощью командыmkdir (с флагом-p, который позволяет нам создать папку с вложенной папкой внутри нее):

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

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

Предоставить разрешения

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

sudo chown -R $USER:$USER /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example2.com/html

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

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

sudo chmod -R 755 /var/www

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

[[step-two -—- create-demo-pages-for-each-site]] == Шаг второй - Создайте демонстрационные страницы для каждого сайта

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

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

Начнем сexample.com. Мы можем открыть файлindex.html в нашем редакторе, набрав:

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

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


  
    Welcome to Example.com!
  
  
    

Success! The example.com server block is working!

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

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

cp /var/www/example.com/html/index.html /var/www/example2.com/html/index.html

Теперь давайте откроем этот файл и изменим соответствующую информацию:

nano /var/www/example2.com/html/index.html

  
    Welcome to Example2.com!
  
  
    

Success! The example2.com server block is working!

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

[[step-three -—- create-new-server-block-files]] == Шаг третий - Создание новых файлов серверных блоков

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

Для начала нам нужно настроить каталог, в котором будут храниться блоки нашего сервера, а также каталог, который сообщает Nginx, что блок сервера готов обслуживать посетителей. В каталогеsites-available будут храниться все файлы блоков нашего сервера, а в каталогеsites-enabled будут храниться символические ссылки на блоки сервера, которые мы хотим опубликовать. Мы можем сделать обе директории, набрав:

sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled

Note: Этот макет каталогов был представлен участниками Debian, но мы включаем его сюда для дополнительной гибкости при управлении нашими блоками сервера (поскольку таким образом проще временно включать и отключать блоки сервера).

Затем мы должны указать Nginx искать серверные блоки в каталогеsites-enabled. Для этого мы отредактируем основной файл конфигурации Nginx и добавим строку, объявляющую необязательный каталог для дополнительных файлов конфигурации:

sudo nano /etc/nginx/nginx.conf

Добавьте эти строки в конец блокаhttp {}:

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;

Первая строка инструктирует Nginx искать серверные блоки в каталогеsites-enabled, а вторая строка увеличивает объем памяти, выделяемой для синтаксического анализа доменных имен (поскольку теперь мы используем несколько доменов).

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

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

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

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

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

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

Note: Из-за описанных конфигураций все файлы серверных блоковmust оканчиваются на.conf.

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

server {
    listen  80;
    server_name localhost;

    location / {
        root  /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page  500 502 503 504  /50x.html;
    location = /50x.html {
        root  /usr/share/nginx/html;
    }
}

Первое, что нам нужно настроить, - этоserver_name, который сообщает Nginx, какие запросы указывают на этот блок сервера. Мы объявим имя основного сервера,example.com, а также дополнительный псевдоним дляwww.example.com, чтобы запросыwww. и неwww. обслуживались одинаковым содержимым. :

server_name example.com www.example.com;

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

Затем мы хотим изменить корень документа, указанный в директивеroot. Укажите его на корневой каталог документа сайта, который вы создали:

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

Мы также хотим добавить командуtry_files, которая завершается ошибкой 404, если желаемое имя файла или каталог не найдены:

try_files $uri $uri/ =404;

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

server {
    listen  80;

    server_name example.com www.example.com;

    location / {
        root  /var/www/example.com/html;
        index  index.html index.htm;
        try_files $uri $uri/ =404;
    }

    error_page  500 502 503 504  /50x.html;
    location = /50x.html {
        root  /usr/share/nginx/html;
    }
}

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

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

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

Начните с копирования сcp:

sudo cp /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-available/example2.com.conf

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

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

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

server {
    listen  80;

    server_name example2.com www.example2.com;

    location / {
        root  /var/www/example2.com/html;
        index  index.html index.htm;
        try_files $uri $uri/ =404;
    }

    error_page  500 502 503 504  /50x.html;
    location = /50x.html {
        root  /usr/share/nginx/html;
    }
}

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

[[step-four -—- enable-the-new-server-block-files]] == Шаг четвертый - включите новые файлы блоков сервера

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

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

Когда вы закончите, перезапустите Nginx, чтобы изменения вступили в силу:

sudo systemctl restart nginx

[[step-five -—- set-up-local-hosts-file-optional]] == Шаг пятый - Настройка файла локальных хостов (необязательно)

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

Note: Убедитесь, что вы выполняете эти шаги на своем локальном компьютере, а не на своем VPS-сервере. Вам понадобится доступ к административным учетным данным для этого компьютера.

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

sudo nano /etc/hosts

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

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

127.0.0.1   localhost
127.0.1.1   guest-desktop
server_ip_address example.com
server_ip_address example2.com

Это направит любые запросыexample.com иexample2.com на наш локальный компьютер и отправит их на наш сервер вserver_ip_address.

[[step-six -—- test-your-results]] == Шаг шестой - проверьте свои результаты

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

http://example.com

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

Success! The example.com server block is working!

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

Если все настроенные вами сайты работают нормально, значит, вы успешно настроили новые блоки серверов Nginx на том же сервере CentOS.

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

Заключение

Теперь у вас должен быть один сервер CentOS 7, который обрабатывает несколько сайтов с разными доменами. Вы можете расширить этот процесс, выполнив шаги, описанные выше, чтобы сделать дополнительные блоки серверов позже. Не существует программного ограничения на количество доменных имен, которые Nginx может обработать, поэтому не стесняйтесь делать столько, сколько способен обработать ваш сервер.

Related