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

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


Введение

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

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

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

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

Предпосылки

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

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

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

Сначала добавьте репозиторий 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 и продолжите работу с учебным пособием.

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

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

Шаг первый — создайте структуру каталогов

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

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

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

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

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

Помните, что части, выделенные красным, представляют доменные имена, которые мы хотим обслуживать с нашего 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

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

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

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

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

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

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

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

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

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

Мы можем скопировать этот файл, чтобы использовать его в качестве шаблона для 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
<html>
  <head>
    <title>Welcome to Example2.com!</title>
  </head>
  <body>
    <h1>Success! The example2.com server block is working!</h1>
  </body>
</html>

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

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

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

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

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

Примечание. Этот макет каталога был представлен участниками 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

Примечание. Из-за описанных нами конфигураций все файлы серверных блоков должны заканчиваться на .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;

Примечание. Каждый оператор 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;
    }
}

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

Шаг четвертый — включите новые файлы блоков сервера

Теперь, когда мы создали наши файлы блоков сервера, нам нужно включить их, чтобы 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

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

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

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

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

sudo nano /etc/hosts

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

Детали, которые вам нужно добавить, — это общедоступный 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.

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

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

http://example.com

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

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

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

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

Заключение

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