Установка и настройка Nginx на Rocky Linux 9

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

В этой статье вы узнаете, как установить Nginx на сервер Rocky Linux 9, настроить брандмауэр, управлять процессами Nginx и настроить блоки server для размещения более одного домена на одном сервере.

Прежде чем приступить к работе, вы должны настроить на своём сервере учетную запись пользователя без полномочий root с привилегиями sudo. Вы можете узнать, как настроить учетную запись обычного пользователя, следуя нашему руководству по начальной настройке сервера.

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

Для начала войдите в систему как пользователь без привилегий root.

1: Установка Nginx

Nginx доступен в репозиториях Rocky по умолчанию, вы можете установить его одной командой с помощью диспетчера пакетов dnf.

Установите пакет nginx с помощью dnf install:

sudo dnf install nginx

При появлении запроса введите y для подтверждения установки nginx. После этого dnf установит Nginx и все необходимые зависимости на ваш сервер.

По завершению установки выполните следующие команды, чтобы включить и запустить веб-сервер:

sudo systemctl enable nginx

sudo systemctl start nginx

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

2: Настройка брандмауэра

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

Чтобы активировать HTTP-соединения через порт 80 на постоянной основе, выполните следующую команду:

sudo firewall-cmd --permanent --add-service=http

Чтобы убедиться, что порт открылся, вы можете запустить:

sudo firewall-cmd --permanent --list-all

Вы получите такой вывод:

public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: cockpit dhcpv6-client http ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Сейчас необходимо перезагрузить службу брандмауэра, чтобы применить изменения:

sudo firewall-cmd --reload

Теперь ваш веб-сервер будет доступен для внешних посетителей.

3: Тестирование веб-сервера

На этом этапе веб-сервер должен быть запущен и работать.

С помощью команды systemctl status мы можем убедиться, что служба запущена:

systemctl status nginx

Вывод должен выглядеть так:

nginx.service - The nginx HTTP and reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
     Active: active (running) since Wed 2022-09-14 21:03:46 UTC; 7min ago
    Process: 18384 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
    Process: 18385 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
    Process: 18386 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
   Main PID: 18387 (nginx)
      Tasks: 3 (limit: 10938)
     Memory: 2.8M
        CPU: 43ms
     CGroup: /system.slice/nginx.service
             ├─18387 "nginx: master process /usr/sbin/nginx"
             ├─18388 "nginx: worker process"
             └─18389 "nginx: worker process"

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

Попробуйте получить доступ к целевой странице Nginx по умолчанию, перейдя по IP-адресу вашего сервера, чтобы убедиться, что программное обеспечение работает правильно. Если вы не знаете IP-адрес своего сервера, его можно найти с помощью инструмента icanhazi:

curl -4 icanhazip.com

Узнав IP-адрес сервера, введите его в адресную строку браузера:

http://your_server_ip

Вы должны получить целевую страницу Nginx по умолчанию:

Это значит, что сервер работает правильно и готов обслуживать сайты.

4: Управление процессом Nginx

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

Остановить веб-сервер можно с помощью команды systemctl stop:

sudo systemctl stop nginx

Запустить остановленный веб-сервер можно с помощью systemctl start:

sudo systemctl start nginx

C помощью команды перезапуска systemctl restart вы можете остановить и снова запустить службу:

sudo systemctl restart nginx

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

sudo systemctl reload nginx

Ранее мы уже настроили автоматический запуск Nginx при загрузке сервера. Его можно отключить с помощью systemctl disable:

sudo systemctl disable nginx

Чтобы снова включить автозапуск сервиса, используйте:

sudo systemctl enable nginx

5: Важные файлы и каталоги Nginx

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

Контент

  • /usr/share/nginx/html: фактический веб-контент, который по умолчанию состоит только из страницы Nginx по умолчанию, которую вы видели ранее, обслуживается из каталога /usr/share/nginx/html. Это можно поменять, изменив файлы конфигурации Nginx.

Конфигурация сервера

  • /etc/nginx: каталог конфигурации Nginx. Здесь находятся все конфигурационные файлы Nginx.
  • /etc/nginx/nginx.conf: основной файл конфигурации Nginx. Вся глобальная конфигурация Nginx находится здесь.
  • /etc/nginx/conf.d/: этот каталог содержит файлы конфигурации блока server, где вы можете определить веб-сайты, размещенные на Nginx. Как правило, рекомендуется хранить каждый веб-сайт в отдельном файле, а сами файлы называть доменным именем веб-сайта, например your_domain.conf.

Журналы сервера

  • /var/log/nginx/access.log: каждый запрос к вашему веб-серверу записывается в этот лог, если Nginx не настроен по-другому.
  • /var/log/nginx/error.log: в этот лог будут записываться все ошибки Nginx.

Итак, у нас уже всё готово для настройки сайта и размещения одного или нескольких доменов.

6: Настройка блоков server (необязательно)

При работе с веб-сервером Nginx блоки server (аналог виртуальных хостов в Apache) используются для настройки и размещения более одного домена с одного сервера. В Rocky Linux 9 эти блоки определяются в файлах .conf, которые расположены в /etc/nginx/conf.d. Для примера мы настроим домен под названием your_domain, но вы должны заменить его своим доменным именем.

Nginx в Rocky Linux 9 настроен по умолчанию на обслуживание файлов из каталога /usr/share/nginx/html. Это подходит для работы одного сайта, но не сработает, если вы разместите несколько сайтов. Чтобы не редактировать /usr/share/nginx/html, мы создадим структуру каталогов в /var/www для веб-сайта your_domain, а /usr/share/nginx/html оставим в качестве каталога по умолчанию, который будет обслуживаться, если клиентский запрос не соответствует ни одному другому сайту.

C помощью флага -p (он создаёт необходимые родительские каталоги) создайте каталог для your_domain:

sudo mkdir -p /var/www/your_domain/html

Затем нужно назначить владельца каталога. Сделать это можно с помощью переменной окружения $USER, которая должна ссылаться на текущего системного пользователя:

sudo chown -R $USER:$USER /var/www/your_domain/html

Для проверки конфигурации блока server мы создадим образец страницы index.html. Текстовый редактор по умолчанию в Rocky Linux 9 называется vi. Он очень мощный, но может быть сложноват для пользователей, которые с ним не работали. Однако вы можете установить и другой, более привычный вам редактор, например nano: 

sudo dnf install nano

Теперь создадим шаблон страницы index.html с помощью nano:

nano /var/www/your_domain/html/index.html

Внутри разместите следующий шаблон HTML:

<html>
    <head>
        <title>Welcome to your_domain</title>
    </head>
    <body>
        <h1>Success! Your Nginx server is successfully configured for <em>your_domain</em>. </h1>
<p>This is a sample page.</p>
    </body>
</html>

Когда закончите, сохраните и закройте файл. Если работаете с nano, нажмите CTRL + X, затем Y и Enter.

Сейчас нужно создать блок server с директивами, которые указывают на корневой каталог, чтобы Nginx мог обслуживать этот контент. Создайте новый блок в /etc/nginx/conf.d/your_domain.conf:

sudo nano /etc/nginx/conf.d/your_domain.conf

Вставьте следующий блок конфигурации:

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

        root /var/www/your_domain/html;
        index index.html index.htm index.nginx-debian.html;

        server_name your_domain www.your_domain;

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

Обратите внимание, мы указали в параметре root адрес нового каталога, а в server_name — наш домен. Сохраните и закройте файл.

Теперь на нашем сервере включены и настроены два блока server, которые отвечают на запросы на основе их директив listen и server_name (как Nginx обрабатывает эти директивы, можно прочитать здесь):

  • your_domain: будет отвечать на запросы для your_domain и www.your_domain.
  • default: будет отвечать на любые запросы через порт 80, которые не соответствуют двум другим блокам.

С помощью nginx -t убедитесь, что ни в одном из ваших файлов Nginx нет синтаксических ошибок:

sudo nginx -t

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

sudo systemctl restart nginx

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

Обновление контекста chcon позволит использовать корневой каталог в качестве контента HTTP:

chcon -vR system_u:object_r:httpd_sys_content_t:s0 /var/www/your_domain/

Теперь Nginx должен обслуживать ваше доменное имя. Для проверки перейдите по адресу http://your_domain, где вы увидете что-то вроде этого: 

Tags: , ,

Добавить комментарий