Установка Nginx на CentOS 8

Введение

Nginx - это популярный веб-сервер, использующийся на Unux-подобных операционных системах. Основными его достоинствами являются надежность и быстрота работы. Используется для отображения статических сайтов и для обратного проксирования перед динамическими сайтами. Первая версия вышла в 2004 году. Начиная с версии 0.7.52 появилась версия под Windows. На данный момент основная версия 1.17. Стабильная версия 1.16. Версия для под Windows до сих пор рассматривается как бета-версия. Сегодня мы будем устанавливать Nginx на недавно вышедшую операционную систему CentOS 8. Так же рассмотрим минимальную начальную настройку.

Установка

В CentOS 8 Nginx можно установить из официального репозитория. Содержится он в репозитории AppStream, версия 1.14. Ее мы и будем устанавливать. Если вам необходимо установить именно последнюю стабильную или основную версии, то необходимо добавить в систему репозиторий Nginx. Инструкция как сделать это имеется на сайте Nginx.

Пакетный менеджер yum в CentOS 8 заменен на пакетный менеджер dnf. Поэтому для установки веб-сервера выполняем команду:

$ dnf install nginx
Установка NGINX

Установка NGINX

Затем запускаем Nginx и добавляем его в автозагрузку:

$ systemctl start nginx

$ systemctl enable nginx

Разрешаем HTTP (ну или HTTPS) подключение в брандмауэре:

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

И проверяем работу веб-сервера введя в адресной строке браузера ip-адрес сервера. Должна открыться начальная страница Nginx.

Начальная страница Nginx

Начальная страница Nginx

Настройка серверных блоков

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

$ nano /etc/nginx/nginx.conf

И приводим его к виду:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {

worker_connections 1024;

}
http {

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
#Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

}

Файл конфигурации Nginx

Файл конфигурации Nginx

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

$ mkdir -p /var/www

Скопируем туда данные начальной страницы Nginx:

$ cp -r /usr/share/nginx/html /var/www

И настроим права на данный каталог:

$ chown -R nginx:nginx /var/www/html
$ chmod -R 775 /var/www/html

Далее создадим файл конфигурации серверного блока по умолчанию:

$ nano /etc/nginx/default.d/default.conf

И приведем его к виду:

server {

listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;
index index.html index.htm;
server_name 192.168.0.44;
location / {

}
error_page 404 /404.html;
location = /40x.html {

}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}

}

Файл конфигурации серверного блока по умолчанию

Файл конфигурации серверного блока по умолчанию

Перезапускаем Nginx и проверяем работу:

$ systemctl restart nginx
Начальная страница Nginx

Начальная страница Nginx

Все работает. Теперь создадим серверный блок. Я буду создавать тестовый сайт с доменным именем example.com. Первым делом создадим директорию для хранения файлов сайта:

$ mkdir /var/www/html/example.com

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

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

И заполняем его следующим содержимым:

<html>
<head>
<title>Example.com</title>
</head>
<body>
<h1>Test example.com</h1>
</body>
</html>
Тестовый index.html

Тестовый index.html

Теперь создадим файл конфигурации серверного блока:

$ nano /etc/nginx/conf.d/example.conf

И заполняем его:

server {

listen 80;
listen [::]:80;

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

index index.html;

server_name example.com www.example.com;

location / {

}

}

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

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

Задаем права:

$ chown -R nginx:nginx /var/www/html/example.com
$ chmod -R 775 /var/www/html/example.com

Затем перезагружаем Nginx:

$ systemctl restart nginx

И проверяем работу серверного блока. Для этого в адресной строке браузера вводим доменное имя сайта, для которого создавался серверный блок.

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

Сайт example.com

Сайт example.com

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

Настройка связки с php-fpm

В настроенной выше конфигурации Nginx будет работать только со статическими веб-сайтами. Для работы с динамическими сайтами необходимо сделать дополнительную настройку. А именно установить php-fpm и настроить связку с Nginx. Тем самым у нас Nginx будет работать в качестве front-end, а php-fpm в качестве back-end. В репозитории AppStream CentOS 8 содержится версия php 7.2.

Устанавливаем php-fpm:

$ dnf install php-fpm
Установка php-fpm

Установка php-fpm

Запускаем и добавляем в автозагрузку:

$ systemctl start php-fpm
$ systemctl enable php-fpm

Создадим для примера еще один серверный блок с проксированием на php-fpm с тестовым доменным именем php.loc. Создаем директорию:

$ mkdir /var/www/html/php.loc

Cделаем тестовый index.php:

$ nano /var/www/html/php.loc/index.php

И пропишем в него функцию phpinfo:

<?php
phpinfo();
?>

Создадим файл конфигурации серверного блока:

$ nano /etc/nginx/conf.d/php.conf

 

server {

listen 80;
listen [::]:80;

root /var/www/html/php.loc;
index index.php index.html;
server_name php.loc www.php.loc;

location / {
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

}

Файл конфигурации серверного блока php.conf

Файл конфигурации серверного блока php.conf

Теперь необходимо настроить php-fpm. Для этого откроем для редактирования его конфигурационный файл:

$ nano /etc/php-fpm.d/www.conf

И изменим содержимое трех строк на:

user = nginx
group = nginx
listen = /var/run/php-fpm/php7.2-fpm.sock

Остальные строки, если вам не нужно иное, можно оставить без изменения.

Если после установки php-fpm у вас создались файлы php-fpm.conf и php.conf в каталогах /etc/nginx/conf.d/ и /etc/nginx/default.d/, то необходимо их удалить или закомментировать содержимое, иначе при запуске Nginx можете получить ошибку.

$ nano /etc/nginx/conf.d/php-fpm.conf
$ nano /etc/nginx/default.d/php.conf
Комментируем содержимое php-fpm.conf

Комментируем содержимое php-fpm.conf

Комментируем содержимое php.conf

Комментируем содержимое php.conf

Перезапускаем веб-сервер:

$ systemctl restart nginx

И проверяем работоспособность серверного блока с поддержкой php.

Сайт php.loc

Сайт php.loc

Все работает. Теперь в каталог php.log вместо тестового index.php с функцией phpinfo можно при необходимости загружать любую CMS систему и пользоваться. Только в этом случае не забудьте настроить сервер баз данных.

Заключение

В настоящей статье мы рассмотрели установку Nginx, настройку серверных блоков и связку с php-fpm на операционной системе CentOS 8. Обратите внимание, что приведенная в статье конфигурация является минимальной для того, что бы все заработало. Рабочая же конфигурация сервера зависит от многих факторов, настраивается для каждого конкретного случая индивидуально и может отличаться от приведенной выше. Если остались вопросы - пишите в комментариях.

Читайте также:

Оставить комментарий