Структура каталогов для размещения сайтов
Чтобы в будущем мы могли просто и непринуждённо добавлять новые сайты, настраивать FTP или sFTP-доступ для отдельных директорий, не помешает заранее определиться, как оптимально расположить их на сервере.
Базовая структура такова:
/var Системная директория /www Директория веб-сервера для размещения сайтов |
/example1.com Сайты /example2.com |
Она будет использоваться в качестве примера ниже.
Тем не менее, если вы планируете разместить на сервере только один сайт, можно не тратить время на настройки и просто загрузить файлы сайта в папку /usr/share/nginx/html
— сайт заработает и так. Но в будущем это может привести к необходимости в перенастройке — например, при добавлении нового сайта.
Создание директории сайта
Чтобы создать папку для первого сайта, введите в консоли следующую команду:
mkdir /var/www/example.com
Осталось настроить права доступа к ней. Чтобы все функции сайта работали корректно, его файлы должны быть доступны для обработки веб-серверу. Поэтому указываем в качестве владельца системного пользователя nginx
:
Ubuntu и Debian:
chown -R www-data:www-data /var/www/example.com
CentOS:
chown -R nginx:nginx /var/www/example.com
Недостаток такого подход в том, что работать с файлами сайта будет не очень удобно. Формально при каждой загрузке новых файлов потребуется редактировать их владельца — с пользователя, под которым файлы были загружены, на системного пользователя и группу веб-сервера.
Настройка веб-сервера
Важно учесть, что некоторые CMS имеют собственные, готовые конфигурационные файлы для nginx. Поэтому перед настройкой проверьте базу знаний официального сайта вашей системы управления контентом и документацию Nginx:
Инструкция, приведённая ниже, позволяет настроить базовый виртуальный хост без каких-либо специфических настроек.
Шаги по настройке веб-сервера, а точнее, настройке виртуальных хостов, отличаются в зависимости от вашей операционной системы.
Настройка nginx на Debian и Ubuntu
Перед настройкой нужно отключить старый конфигурационный файл по умолчанию, который был создан для проверки работы веб-сервера:
unlink /etc/nginx/sites-enabled/default.conf
Создаём конфигурационный файл нашего нового сайта:
touch /etc/nginx/sites-available/example.com.conf
Заполняем его данными:
nano /etc/nginx/sites-available/example.com.conf
server { listen 80; listen [::]:80; server_name www.example.com example.com; root /var/www/example.com; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } location ~ \.php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } location ~ /\.ht { access_log off; log_not_found off; deny all; } }
Создаём символьную ссылку в директорию с конфигурационными файлами активных сайтов:
ln /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf
Проверяем отсутствие ошибок и перезапускаем nginx для применения изменений:
nginx -t systemctl reload nginx
Настройка nginx на CentOS
Создаём директорию, где будут храниться конфигурационные файлы наших сайтов:
mkdir /etc/nginx/sites-enabled
Отключаем в конфигурационном файле nginx
виртуальный хост по умолчанию и включаем нашу директорию с конфигурационными файлами. Для этого:
Делаем копию конфигурационного файла на случай ошибок и сбоев:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.copy
Открываем оригинальный конфигурационный файл в консольном редакторе:
vim /etc/nginx/nginx.conf
В блоке http { ... }
находим блок server { … }
, и в начале каждой строки этого блока ставим символ #
(комментируем строки).
В пределах блока http { … }
добавляем запись:
include /etc/nginx/sites-enabled/*;
Переименовываем файл с конфигурацией по умолчанию, чтобы он не мешал работе нашего нового сайта:
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.copy
Создаём конфигурационный файл нашего сайта example.com
:
touch /etc/nginx/sites-enabled/example.com.conf
Открываем в консольном редакторе и копируем в файл базовые настройки:
vim /etc/nginx/sites-enabled/example.com.conf
server { listen 80; listen [::]:80; server_name www.example.com example.com; root /var/www/example.com; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { access_log off; log_not_found off; deny all; } }
Сохраняем файл и проверяем наличие ошибок:
nginx -t
Если всё в порядке, перезагружаем веб-сервер для применения изменений:
systemctl reload nginx
Создание базы данных
База данных — обязательный компонент для работы любого современного сайта (за исключением совсем простых). Одним из этапов установки большинства CMS всегда является настройка базы данных.
Чтобы создать базу для нового сайта, подключитесь к серверу баз данных:
mysql -u root -p
После ввода пароля создадим новую базу данных exampleDB
:
create database exampleDB;
Далее добавим нового пользователя сервера баз данных (exampleDB-user
) и предоставим ему доступы для работы с базой сайта:
grant all privileges on exampleDB.* to 'exampleDB-user'@'localhost' identified by 'p@ssw0rd' with grant option;
Выходим из консоли сервера баз данных:
exit;

Загрузка файлов и проверка работы сайта
Если у вас уже есть готовый сайт, загрузить его файлы можно по sFTP.
В итоге в папке сайта example.com
должен оказаться архив вашего сайта (в примере example.com.tar.gz
) и дамп базы данных (в примере dump.sql
):

Распаковываем сайт:
tar -xzf example.com.tar.gz
На CentOS tar
по умолчанию не установлен. Для установки воспользуйтесь командой:
yum -y install tar
Разворачиваем дамп базы данных:
mysql -u exampleDB-user -p exampleDB < dump.sql
После этого нужно изменить данные для подключения к новой базе данных в конфигурационных файлах вашего сайта.
Установка CMS
Рассмотрим установку на примере WordPress
Переходим в папку нужного сайта и скачиваем туда архив CMS:
cd /var/www/example.com wget https://ru.wordpress.org/latest-ru_RU.tar.gz
Распаковываем скачанный архив и проверяем содержимое:
tar -xzf latest-ru_RU.tar.gz ls -al
Архив содержал папку wordpress
— она нам не нужна, поэтому переместим все файлы оттуда в корневую директорию сайта:
mv ./wordpress/* ./
После этого нужно проверить, что в лишней папке ничего не осталось, и удалить её вместе с архивом.
rmdir wordpress rm latest-ru_RU.tar.gz
По инструкции установки меняем название конфигурационного файла и добавляем туда данные нашей тестовой базы данных:
mv wp-config-sample.php wp-config.php
Ubuntu и Debian:
nano wp-config.php
CentOS:
vim wp-config.php

Теперь нужно обеспечить доступ веб-сервера к файлам загруженного сайта. Для этого настроим их владельцем системного пользователя веб-сервера. В зависимости от операционной систему он может называться по-разному:
Ubuntu и Debian:
chown -R www-data:www-data /var/www/example.com
CentOS:
chown -R nginx:nginx /var/www/example.com
Теперь дело за малым: осталось донастроить Nginx.
Перед изменением сохраним копию исходного конфигурационного файла:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.copy
Формально процесс сводится к проверке настроек в демонстрационных конфигурационных файлах и их адаптации под себя.
WordPress предлагает использовать модульную структуру конфигов — так, чтобы общие настройки веб-сервера и настройки отдельных сайтов были разделены. Благодаря этому не придётся копировать одни и те же параметры для каждого нового сайта — будет достаточно настроить базовые параметры и включить конфигурационные файлы с общими и глобальными настройками.
В итоге получится следующая структура:
/etc/nginx/nginx.conf
— главный конфигурационный файл Nginx/etc/nginx/global/restrictions.conf
(для CentOS/etc/nginx/conf.d/global/restrictions.conf
) — содержит ограничения на несанкционированный доступ к скрытым и системным файлам, настройкиrobots.txt
/etc/nginx/global/wordpress.conf
(для CentOS/etc/nginx/conf.d/global/wordpress.conf
) — содержит глобальные настройки для работы сайтов/etc/nginx/sites-available/example.com.conf
— конфигурационный файл для сайтаexample.com
Однако строго придерживаться такой структуры не обязательно — если вы планируете разместить на сервере только один сайт, некоторые параметры можно объединить. Например, чтобы развернуть один сайт на сервере, достаточно приведённых ниже настроек. Откройте в консольном редакторе соответствующий файл и скопируйте туда следующее содержимое:
Ubuntu и Debian:
/etc/nginx/nginx.conf
user www-data; worker_processes auto; worker_cpu_affinity auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; #daemon off; events { worker_connections 1024; } http { # rewrite_log on; include mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; sendfile on; # tcp_nopush on; keepalive_timeout 3; # tcp_nodelay on; # gzip on; #php max upload limit cannot be larger than this client_max_body_size 13m; index index.php index.html index.htm; include sites-enabled/*; }
/etc/nginx/sites-available/example.com.conf
server { server_name example.com www.example.com; root /var/www/example.com; location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ /\. { deny all; } location ~* /(?:uploads|files)/.*\.php$ { deny all; } location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include fastcgi.conf; fastcgi_intercept_errors on; fastcgi_pass unix:/run/php/php7.4-fpm.sock; include snippets/fastcgi-php.conf; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; } }
CentOS:
/etc/nginx/nginx.conf
user nginx; worker_processes auto; worker_cpu_affinity auto; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; #daemon off; events { worker_connections 1024; } http { # rewrite_log on; include mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; sendfile on; # tcp_nopush on; keepalive_timeout 3; # tcp_nodelay on; # gzip on; #php max upload limit cannot be larger than this client_max_body_size 13m; index index.php index.html index.htm; include /etc/nginx/conf.d/*.conf; include sites-enabled/*; }
/etc/nginx/sites-enabled/example.com.conf
server { server_name example.com www.example.com; root /var/www/example.com; location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ /\. { deny all; } location ~* /(?:uploads|files)/.*\.php$ { deny all; } location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; } }
Это пример базовых настроек конфигурационных файлов nginx
для сайта на WordPress. Частные случаи могут требовать более тонких настроек.
После изменения конфигурационных файлов нужно обязательно проверить наличие ошибок:
nginx -t
Если всё в порядке, нужно перезапустить веб-сервер для применения изменений:
systemctl reload nginx
После этого нужно открыть ваш домен или IP-адрес сервера в браузере — должен открыться установщик WordPress. При наличии ошибок проверьте логи /var/log/nginx/error.log
, запущена ли служба php-fpm
:
tail -f /var/log/nginx/error.log systemctl status php7.4-fpm
Собственно на этом всё.