Настройка web сервера nginx, php-fpm, php7 на CentOS 7

Настройка web сервера nginx, php-fpm, php7 на CentOS 7 Хостинг
Содержание
  1. Introduction
  2. Step 1 — Install phpMyAdmin
  3. Step 2 — Change Login URL
  4. Step 3 — Setup a Web Server Authentication Gate
  5. Conclusion
  6. Предпосылки
  7. Шаг 1. Установка Nginx
  8. Шаг 2. Установка MariaDB
  9. Шаг 3. Установка PHP
  10. Шаг 4. Настройка Nginx для обработки страниц PHP
  11. Больше информации
  12. Installation of phpMyAdmin on CentOS 7
  13. Step 1: Install EPEL Repository
  14. Step 2: Install Apache Web Server
  15. Step 3: Installing phpMyAdmin on CentOS 7
  16. Step 4: Configuring and Securing phpMyAdmin
  17. Restrict IP Addresses
  18. Change Alias
  19. Step 5: Restart Apache
  20. Step 6: Verify phpMyAdmin is Working
  21. Устанавливаем Nginx в CentOS 7
  22. Шаг 1: Добавление Nginx в систему
  23. Шаг 2: Запуск веб-сервера
  24. Шаг 3: Разрешение трафика веб-сервера в брандмауэре
  25. Еще статьи по данной теме:
  26. Помогла ли Вам статья?
  27. Install Nginx
  28. Firewall
  29. SELinux
  30. Test Nginx
  31. Install MariaDB
  32. Install PHP
  33. PHP v5.4 (End Of Support)
  34. Test LEMP Stack
  35. Create Virtual Host
  36. Test Virtual host
  37. Conclusion
  38. Введение
  39. Установка nginx на CentOS 7
  40. Настройка nginx
  41. Установка php-fpm 7
  42. Настройка бесплатного ssl сертификата Lets Encrypt
  43. Установка mariadb 10 на CentOS 7
  44. Установка phpmyadmin
  45. Доступ к сайту по sftp
  46. Работа с сайтами разных пользователей на одном веб сервере
  47. Ротация логов виртуальных хостов
  48. Заключение
  49. Помогла статья? Подписывайся на telegram канал автора

Introduction

Step 1 — Install phpMyAdmin

The installation will now complete.

 /usr/share/phpMyAdmin /usr/share/nginx/html

Finally, restart Nginx and PHP-FPM to apply changes.

systemctl restart nginx
systemctl restart php-fpm
http://server_domain_or_IP/phpMyAdmin

Web Interface

Step 2 — Change Login URL

Note: in this guide, we will name our access location /my.

 /usr/share/nginx/html phpMyAdmin my
http://server_domain_or_IP/phpMyAdmin

404 Error

http://server_domain_or_IP/my

Web Interface

Step 3 — Setup a Web Server Authentication Gate

To provide an additional layer of security, we can set up authentication in Nginx.

Before we do this, we will create a password file that will store our authentication credentials.

htpasswd /etc/nginx/.htpasswd holu
# htpasswd -c /etc/nginx/.htpasswd holuNew password:
Re-type new password:
Adding password user holu
username:.rv.fKfjbYNTUPzV.

Now we are ready to modify our Nginx configuration file. Open this file in your text editor to get started:

 /etc/nginx/conf.d/default.conf

After we are finished, the file should look like this:

server . location /my auth_basic auth_basic_user_file /etc/nginx/.htpassword .

Save and close the file when you are finished.

To implement our new authentication gate, we must restart the web server:

http://server_domain_or_IP/my

Password Authentication

Conclusion

License: MIT

Want to contribute?

Get Rewarded: Get up to €50 in credit! Be a part of the community and contribute. Do it for the money. Do it for the bragging rights. And do it to teach others!

  • Устанавливаем phpMyAdmin в CentOS 7
  • Вопросы и ответы

Установка phpMyAdmin в CentOS 7

  1. Запустите консоль любым удобным методом, например, через меню «Приложения».
  2. Запуск терминала для дальнейшей установки phpMyAdmin в CentOS 7

  3. Впишите команду sudo rpm -iUvh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm для загрузки пакета программного обеспечения из пользовательского репозитория Extra Packages for Enterprise Linux.
  4. Скачивание пакетов из репозитория для phpMyAdmin в CentOS 7

  5. Для продолжения процесса введите пароль от учетной записи с рут-доступом.
  6. Ввод пароля для скачивания пакетов из репозитория phpMyAdmin в CentOS 7

  7. После завершения добавления пакетов следует обновить список системных библиотек командой sudo yum -y update.
  8. Обновление системных пакетов для установки phpMyAdmin в CentOS 7

  9. Указанная выше команда инсталлирует все доступные обновления, и после этого останется только инсталлировать сам клиент приложения через sudo yum -y install phpmyadmin.
  10. Установка программного обеспечения phpMyAdmin в CentOS 7

  1. Добавьте новый пакет в систему, скачав его из репозитория через sudo rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm.
  2. Скачивание самой последней версии phpMyAdmin в CentOS 7 из репозитория

    Lumpics.ru

  3. Обновите доступные системные библиотеки с помощью уже знакомой команды sudo yum update.
  4. Обновление системных библиотек для установки последней версии phpMyAdmin в CentOS 7

  5. Включите поддержку последней версии приложения, на данный момент это 7.1. Для этого введите yum-config-manager --enable remi-php71.
  6. Активировать совместимость с PHP 7 для phpMyAdmin в CentOS 7

  7. Установите ПО sudo yum install phpmyadmin, а подходящая версия PHP определится автоматически.
  8. Установить последнюю версию phpMyAdmin в CentOS 7

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

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

sudo yum install epel-release
sudo yum install nginx
sudo systemctl start nginx

После этого следуйте такой инструкции:

  1. Включите phpMyAdmin в директорию веб-сервера с помощью строки sudo ln -s /usr/share/phpMyAdmin /var/www/html/phpmyadmin.
  2. Создать папку с phpMyAdmin в Nginx для CentOS

  3. После внесения изменений осуществите перезапуск, введя sudo systemctl restart php-fpm.
  4. Перезапустить сервер Nginx для установки phpMyAdmin в CentOS 7

  5. Через стандартный текстовый редактор запустите конфигурационный файл sudo vi /etc/nginx/nginx.conf.
  6. Открыть конфигурационный файл Nginx для настройки phpMyAdmin в CentOS 7

  7. Отыщите блок «http» и добавьте туда строку disable_symlinks off;.
  8. Редактировать конфигурационный файл Nginx для phpMyAdmin в CentOS 7

  9. Сохраните изменения и закройте файл, после чего перезагрузите Nginx sudo nginx -s reload.
  10. Перезапустить сервер Nginx после установки phpMyAdmin в CentOS 7

Хоть предыдущий веб-сервер и считается лучше в некоторых аспектах, Apache все еще остается достаточно популярным решением и используется в системе программного обеспечения LAMP. Его установка в CentOS производится буквально несколькими командами:

yum install httpd -y
systemctl start httpd.service
systemctl enable httpd.service

  1. Задайте пароль для доступа администратора с помощью sudo htpasswd -c /etc/httpd/passwords admin.
  2. Задать пароль для сервера Apache phpMyAdmin в CentOS 7

  3. Запустите конфигурационный файл для дальнейшего редактирования: vi /etc/httpd/conf.d/phpMyAdmin.conf.
  4. Открыть конфигурационный файл Apache для настройки phpMyAdmin в CentOS 7

  5. Отыщите секцию «<Directory>» и вставьте такое содержимое:
  6. Редактировать конфигурационный файл Apache phpMyAdmin в CentOS 7

Это краткое руководство покажет вам основные шаги, необходимые для установки стека LEMP на сервере CentOS 7.

Предпосылки

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

Шаг 1. Установка Nginx

Nginx недоступен в репозитории CentOS 7 по умолчанию, поэтому мы будем использовать репозитории EPEL. Чтобы добавить репозиторий EPEL в вашу систему, используйте следующую команду:

sudo yum install epel-release

Теперь, когда репозиторий EPEL включен, установите пакет Nginx с помощью:

sudo yum install nginx

После установки запустите и включите службу Nginx, набрав:

sudo systemctl start nginx sudo systemctl enable nginx

Шаг 2. Установка MariaDB

Следующим шагом является установка пакетов MariaDB. Для этого введите:

sudo yum install mariadb-server

После установки сервера MariaDB запустите и включите службу с помощью:

sudo systemctl start mariadb.service sudo systemctl enable mariadb.service

На момент написания MariaDB 5.5 доступна в официальном репозитории CentOS 7. Если вы хотите установить более новую версию, обратитесь к этому руководству . Чтобы установить MySQL вместо MariaDB, ознакомьтесь с инструкциями по установке в нашем руководстве .

Шаг 3. Установка PHP

CentOS 7 поставляется с версией PHP 5.4, которая в течение некоторого времени является EOL-ed, поэтому мы будем использовать репозиторий Remi для установки PHP 7.2.

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

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

После добавления установите пакет yum-utils и включите репозиторий remi-php72 :

sudo yum install yum-utils sudo yum-config-manager --enable remi-php72

Теперь, когда у нас включен репозиторий Remi, мы можем установить PHP FPM и несколько наиболее распространенных модулей PHP с помощью:

sudo yum install php-fpm php-opcache php-cli php-gd php-curl php-mysql

По умолчанию PHP FPM запускается как пользовательский apache на порту 9000. Мы изменим пользователя на nginx и переключимся с сокета TCP на сокет Unix. Для этого отредактируйте строки, выделенные желтым:

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

Убедитесь, что каталог /var/lib/php имеет правильные разрешения:

chown -R root:nginx /var/lib/php

Сохраните файл, включите и запустите службу PHP FPM с помощью:

sudo systemctl enable php-fpm sudo systemctl start php-fpm

Шаг 4. Настройка Nginx для обработки страниц PHP

Теперь, когда у нас установлены все компоненты LEMP, мы можем отредактировать файл конфигурации блока сервера Nginx и добавить следующие строки, чтобы Nginx мог обрабатывать файлы PHP:

 # other code           

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

sudo systemctl restart nginx

Больше информации

Более подробные инструкции по каждому шагу см. В следующих руководствах.

install phpmyadmin on centos7
  • LAMP (Linux, Apache, MySQL, PHP) stack installed on the server.
  • Access to a sudo user account with root privileges (ability to use the sudo command).
  • The CentOS 7 operating system.
  • The YUM update manager, which is a default component of CentOS 7.
  • A command prompt with root access. To open a command prompt:  Menu > Applications > Utilities > Terminal.
  • A text editor. Vim is included with most Linux installations or you can use Nano.

Installation of phpMyAdmin on CentOS 7

Step 1: Install EPEL Repository

(If you’ve already installed EPEL, you can skip this step.)

sudo yum install -y epel-release

Once that operation finishes, it’s a good idea to refresh and update the EPEL repository:

sudo yum –y update

Step 2: Install Apache Web Server

yum install httpd -y

Verify the status of Apache by running with the command:

systemctl status httpd

You can also enter your server’s IP address in a browser and a testing screen should display:

verifying the apache service is running

Step 3: Installing phpMyAdmin on CentOS 7

sudo yum -y install phpmyadmin

Step 4: Configuring and Securing phpMyAdmin

Restrict IP Addresses

sudo vim /etc/phpMyAdmin/config.inc.php

Once you’ve made the changes, save the file.

Change Alias

sudo vim /etc/phpMyAdmin/config.inc.php

Near the top, you should see two lines:

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin
Alias /MySecretLogin /usr/share/phpMyAdmin

Now, when you go to your login screen, you’ll have to type https://IP_OR_DOMAIN/MySecretLogin (or whatever you choose) to gain access.

Once you’re finished making changes, save the file.

Step 5: Restart Apache

Regardless of which configuration you use, you’ll need to restart the Apache service to see your changes:

sudo systemctl restart httpd.service

Step 6: Verify phpMyAdmin is Working

125.0.0.2/phpmyadmin

Note: Fill in the location of your own public server information in place of “IP_OR_DOMAIN.” You’ll need to collect this information from your particular server configuration. It’ll usually be your domain name or the IP address of your server.

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

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

Устанавливаем Nginx в CentOS 7

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

Шаг 1: Добавление Nginx в систему

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

  1. Откройте «Терминал» удобным для вас образом, например, через вкладку «Избранное» в меню приложений или нажав на горячую клавишу Ctrl + Alt + T.
  2. Переход к терминалу для дальнейшей установки веб-сервера Nginx в CentOS 7

  3. Здесь следует ввести команду стандартного вида sudo yum install epel-release, чтобы подготовить ОС для дальнейшего добавления нового пакета.
  4. Команда для установки дополнительных компонентов перед инсталляцией Nginx в CentOS 7

  5. Это и все последующие манипуляции будут производиться от имени суперпользователя, поэтому их придется подтверждать, введя в новой строке соответствующий пароль.
  6. Подтверждение команды установки дополнительных компонентов перед инсталляцией Nginx в CentOS 7

  7. При появлении уведомления о необходимости добавления нового пакета epel подтвердите процедуру, выбрав вариант y.
  8. Подтверждение установки найденных пакетов дополнительных компонентов Nginx в CentOS 7

  9. По завершении операции появится новая строка ввода. В ней следует написать sudo yum install nginx, чтобы запустить инсталляцию Nginx со стандартного хранилища.
  10. Ввод команды для установки веб-сервера Nginx в CentOS 7

  11. Еще раз подтвердите уведомление о добавлении пакета.
  12. Подтверждение установки пакетов веб-сервера Nginx в CentOS 7

  13. Дополнительно будет получен и сразу же импортирован публичный ключ. Однако это осуществится только после того, как вы выберете положительный вариант ответа.
  14. Подтверждение импорта публичного ключа для веб-сервера Nginx в CentOS 7

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

Шаг 2: Запуск веб-сервера

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

  1. Первая имеет вид systemctl start nginx и отвечает за запуск сервиса для текущего сеанса.
  2. Команда для запуска работы установленного веб-сервера Nginx в CentOS 7

  3. После активации команды появится всплывающее окно с подтверждением подлинности. Введите здесь пароль суперпользователя и нажмите на Enter.
  4. Подтверждение команды запуска работы Nginx в CentOS 7

    Lumpics.ru

  5. Вторая строка systemctl enable nginx необходима для добавления рассматриваемого веб-сервера в автозагрузку.
  6. Команда для добавления веб-сервера Nginx в CentOS 7 в автозагрузку

  7. Она тоже будет активирована только после ввода пароля.
  8. Подтверждение команды добавления веб-сервера Nginx в CentOS 7 в автозагрузку

  9. Если все прошло успешно, вы увидите информацию о том, что только что была создана символическая ссылка. Именно она и отвечает за доступ к файлу, запускающему Nginx при старте нового сеанса.
  10. Создание символической ссылки при успешном добавлении веб-сервера Nginx в CentOS 7 в автозагрузку

Шаг 3: Разрешение трафика веб-сервера в брандмауэре

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

  1. Откройте «Терминал» и введите там firewall-cmd --zone=public --permanent --add-service=http.
  2. Команда для настройки межсетевого экрана после инсталляции Nginx в CentOS 7

  3. Эту команду тоже следует подтвердить, указав пароль суперпользователя.
  4. Подтверждение команды настройки межсетевого экрана после инсталляции Nginx в CentOS 7

  5. Теперь, когда вы увидели строку «Success», вставьте firewall-cmd --zone=public --permanent --add-service=https и нажмите на Enter.
  6. Вторая команда для настройки межсетевого экрана после инсталляции Nginx в CentOS 7

  7. Осталось только перезагрузить брандмауэр, чтобы все изменения вступили в силу, а осуществляется это через firewall-cmd --reload.
  8. Перезапуск межсетевого экрана после внесения изменений Nginx в CentOS 7

  9. После появления на экране уведомления «Success» можно закрывать консоль и переходить к использованию веб-сервера.
  10. Успешный перезапуск межсетевого экрана после внесения изменений Nginx в CentOS 7

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

Еще статьи по данной теме:

Помогла ли Вам статья?

Nginx is a free, open-source, high-performance HTTP server. Nginx is known for its stability, rich feature set, simple configuration, and low resource consumption.

This tutorial shows you how to install Nginx on CentOS 7 / RHEL 7 with PHP support (through PHP-FPM) and MariaDB support.

PHP-FPM is an alternative PHP FastCGI implementation, and it has some additional features useful for sites of any size, especially busier sites).

Here is the article about Step by Step installation of CentOS 7 / RHEL 7.

Now you have Linux, and the next is to install Apache, MySQL, and PHP on it. Let’s install one by one.

$ su

Install Nginx

Install Nginx repository rpm to download the Nginx from the official site.

### CentOS 7 ###rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm### RHEL 7 ###rpm -Uvh http://nginx.org/packages/rhel/7/noarch/RPMS/nginx-release-rhel-7-0.el7.ngx.noarch.rpm
yum -y install nginx

Start the Nginx service after the installation.

systemctl start nginx

Firewall

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

SELinux

If you get any error of SELinux on the Nginx logs, here is the tutorial on setting SELinux policy for Nginx.

setenforce 0

We recommend you to disable the SELinux permanently.

Test Nginx

Install Linux, Nginx, MariaDB, PHP (LEMP Stack) in CentOS 7 – Nginx Default Page
Install Linux, Nginx, MariaDB, PHP (LEMP Stack) in CentOS 7 – Nginx Default Page

Auto-start the Nginx service at system startup.

systemctl enable nginx

Install MariaDB

CentOS 7 / RHEL 7 offers MariaDB v5.5 from base OS repository, which is a bit older and going to be EOL soon. You can consider installing MariaDB v10.x or MySQL 8.x for your LEMP stack.

yum -y install mariadb mariadb-server
systemctl start mariadb

Enable the MariaDB to start automatically during system boot.

systemctl enable mariadb

Install PHP

PHP v5.4 (End Of Support)

The PHP version (v5.4) available in the CentOS base repository is already the end of support.

Remi, a third party repository which offers up to date version of PHP (v7.3). To enable the Remi repository, install the Remi repository auto-configuration package.

yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm

Install PHP through PHP-FPM (PHP-FPM (FastCGI Process Manager) using YUM command.

yum install -y --enablerepo=remi-php73 php php-fpm php-mysqlnd php-cli

Edit file,

vi /etc/php-fpm.d/www.conf

Verify PHP-FPM listens on port 9000.

listen = 127.0.0.1:9000
[.More.]
pm.min_spare_servers = 5
[.More.]
pm.max_spare_servers = 35
[.More.]

Test LEMP Stack

Create Virtual Host

Create the configuration file called and Edit .

vi /etc/nginx/conf.d/virtual.conf
server { server_name ; root ; location / { index index.html index.htm index.php; } location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; }
}

Create host entry for your domain (server.itzgeek.local) in the file.

vi /etc/hosts

Add a host entry like below.

127.0.0.1 localhost.localdomain localhost server.itzgeek.local

Create the document root directory.

mkdir /usr/share/nginx/html/itzgeek.local

Test Virtual host

echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/itzgeek.local/index.php

Restart the services and Enable autostart.

systemctl restart nginx
systemctl restart php-fpm
systemctl enable php-fpm

Now, open up your web browser and type your domain in the address bar:

The page will look like below:

Install Linux, Nginx, MariaDB, PHP (LEMP Stack) in CentOS 7 – PHP Information
Install Linux, Nginx, MariaDB, PHP (LEMP Stack) in CentOS 7 – PHP Information

From the above screenshot, PHP is working, and it’s working through FPM/FastCGI, as shown in the Server API line.

If you scroll further down, you will see the MariaDB support information.

Install Linux, Nginx, MariaDB, PHP (LEMP Stack) in CentOS 7 – Nginx MariaDB Support
Install Linux, Nginx, MariaDB, PHP (LEMP Stack) in CentOS 7 – Nginx MariaDB Support

Conclusion

That’s All. You have successfully set up LEMP stack on CentOS 7 / RHEL 7. Additionally, you can install phpMyAdmin on CentOS 7 to manage MariaDB / MySQL databases via a web browser.

Я уже писал статью по данной теме, и она формально даже не устарела, если брать все пакеты из официальных репозиториев. Сегодня я настрою производительный веб сервер на свежих версиях nginx, php-fpm, где сам php версии 7.1.  Сейчас использовать версию php54, которую предлагает CentOS по-умолчанию, очень странно, поэтому я решил актуализировать статью и все настроить в соответствии с современными реалиями.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти вступительный тест.

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

Введение

В своей тестовой среде я буду использовать следующие сущности.

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

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

Установка nginx на CentOS 7

Для установки самой свежей стабильной версии nginx на centos подключим родной репозиторий.

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

Если по какой-то причине ссылка изменится или устареет, то можно создать файл с конфигурацией репозитория nginx вручную. Для этого рисуем такой конфиг /etc/yum.repos.d/nginx.repo.

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

Устанавливаем nginx на сервер.

# yum install nginx

Установка nginx на CentOS 7

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

# systemctl start nginx
# systemctl enable nginx

Проверяем, запустился ли web сервер. Для этого идем по ссылке http://95.169.190.64/. Вы должны увидеть стандартную страницу заглушку.

Проверка nginx

Если страница не открывается, то скорее всего вы не настроили firewall. Свою статью по его настройке я приводил в самом начале.

Настройка nginx

# mkdir -p /web/sites/hl.zeroxzed.ru/www && mkdir /web/sites/hl.zeroxzed.ru/log
# mkdir -p /web/sites/p1m2a.zeroxzed.ru/www && mkdir /web/sites/p1m2a.zeroxzed.ru/log

Создадим конфиги nginx для этих виртуальных хостов. Я сразу буду делать их с учетом https, который мы настроим позже. Так что после создания не надо перезапускать веб сервер и проверять работу — будут ошибки. Виртуальный хост сайта показан на примере wordpress. Конфигурация собрана на основе рекомендаций из официальной документации конкретно для веб сервера nginx.

# mcedit /etc/nginx/conf.d/hl.zeroxzed.ru.conf
server { listen 80; server_name hl.zeroxzed.ru; root /web/sites/hl.zeroxzed.ru/www/; index index.php index.html index.htm; access_log /web/sites/hl.zeroxzed.ru/log/access.log main; error_log /web/sites/hl.zeroxzed.ru/log/error.log; location / { return 301 https://hl.zeroxzed.ru$request_uri; } location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ { return 301 https://hl.zeroxzed.ru$request_uri; } location ~ \.php$ { return 301 https://hl.zeroxzed.ru$request_uri; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { rewrite ^ /robots.txt break; allow all; log_not_found off; access_log off; } location ~ /\.ht { deny all; }
}
server { listen 80; server_name www.hl.zeroxzed.ru; rewrite ^ https://hl.zeroxzed.ru$request_uri? permanent;
}
server { listen 443 ssl http2; server_name hl.zeroxzed.ru; root /web/sites/hl.zeroxzed.ru/www/; index index.php index.html index.htm; access_log /web/sites/hl.zeroxzed.ru/log/ssl-access.log main; error_log /web/sites/hl.zeroxzed.ru/log/ssl-error.log; keepalive_timeout	60; ssl_certificate	/etc/letsencrypt/live/hl.zeroxzed.ru/fullchain.pem; ssl_certificate_key	/etc/letsencrypt/live/hl.zeroxzed.ru/privkey.pem; ssl_protocols	TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; ssl_dhparam	/etc/ssl/certs/dhparam.pem; add_header	Strict-Transport-Security 'max-age=604800'; location / { try_files $uri $uri/ /index.php?$args; } location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ { access_log off; expires max; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; #fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT /web/sites/hl.zeroxzed.ru/www/; fastcgi_param SCRIPT_FILENAME /web/sites/hl.zeroxzed.ru/www$fastcgi_script_name; fastcgi_param PATH_TRANSLATED /web/sites/hl.zeroxzed.ru/www$fastcgi_script_name; include fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param HTTPS on; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ /\.ht { deny all; }
}
server { listen 443 ssl http2; server_name www.hl.zeroxzed.ru; rewrite ^ https://hl.zeroxzed.ru$request_uri? permanent;
}

В данной конфигурации настроены все необходимые редиректы, при этом отключен редирект файла robots.txt. Он отдельно отдается по http и https. Это требуется для яндекса во время перехода с http на https и склейки зеркал.

# mcedit /etc/nginx/conf.d/p1m2a.zeroxzed.ru.conf
server { listen 443 ssl http2; server_name p1m2a.zeroxzed.ru; root /web/sites/p1m2a.zeroxzed.ru/www/; index index.php index.html index.htm; access_log /web/sites/p1m2a.zeroxzed.ru/log/ssl-access.log main; error_log /web/sites/p1m2a.zeroxzed.ru/log/ssl-error.log; keepalive_timeout	60; ssl_certificate	/etc/letsencrypt/live/p1m2a.zeroxzed.ru/fullchain.pem; ssl_certificate_key	/etc/letsencrypt/live/p1m2a.zeroxzed.ru/privkey.pem; ssl_protocols	TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; ssl_dhparam	/etc/ssl/certs/dhparam.pem; add_header	Strict-Transport-Security 'max-age=604800'; location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; #fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT /web/sites/p1m2a.zeroxzed.ru/www/; fastcgi_param SCRIPT_FILENAME /web/sites/p1m2a.zeroxzed.ru/www$fastcgi_script_name; fastcgi_param PATH_TRANSLATED /web/sites/p1m2a.zeroxzed.ru/www$fastcgi_script_name; include fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; }
}
server { listen 443 ssl http2; server_name www.p1m2a.zeroxzed.ru; rewrite ^ https://p1m2a.zeroxzed.ru$request_uri? permanent;
}
server { listen 80; server_name p1m2a.zeroxzed.ru; root /web/sites/p1m2a.zeroxzed.ru/www/; index index.php index.html index.htm; access_log /web/sites/p1m2a.zeroxzed.ru/log/access.log main; error_log /web/sites/p1m2a.zeroxzed.ru/log/error.log; location / { return 301 https://p1m2a.zeroxzed.ru$request_uri; try_files $uri $uri/ /index.php?$args; }
}

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

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

Установка и настройка 7-й версии php на centos не очень простая задача. Ранее я уже рассказывал как обновить php до 7-й версии, но в итоге откатился назад. Прошло прилично времени и откатываться уже не будем, так как большинство проблем исправлены.

То же самое будет и с другими пакетами. К примеру, zabbix без плясок с бубнами скорее всего не встанет. В сторонних репозиториях есть еще одна проблема. Иногда они закрываются. И это станет для вас большой проблемой на боевом сервере. Так что к выбору репозитория нужно подходить очень аккуратно и внимательно. Я до сих пор иногда встречаю настроенные сервера centos 5 с очень популярным в прошлом репозиторием centos.alt.ru, который закрылся. Сейчас это уже не так актуально, так как таких серверов осталось мало, но некоторое время назад мне это доставляло серьезные неудобства.

Подключаем remi репозиторий для centos 7.

# rpm -Uhv http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Я получил ошибку:

Retrieving http://rpms.remirepo.net/enterprise/remi-release-7.rpm
warning: /var/tmp/rpm-tmp.nwcDV1: Header V4 DSA/SHA1 Signature, key ID 00f97f56: NOKEY
error: Failed dependencies: epel-release = 7 is needed by remi-release-7.3-2.el7.remi.noarch

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

# yum install epel-release

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

# yum repolist

Список репозиториев

У меня такая картинка получилась.

Активируем репу remi-php71, для этого выполняем команду:

# yum-config-manager --enable remi-php71

Если получаете ошибку:

bash: yum-config-manager: command not found

то установите пакет yum-utils.

# yum install yum-utils

Теперь устанавливаем php7.1.

# yum install php71

Установка php 7.1 на CentOS 7

Установим php-fpm и наиболее популярные модули, которые могут пригодится в процессе эксплуатации веб сервера.

# yum install php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-opcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-zip

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

Запускаем php-fpm и добавляем в автозагрузку.

# systemctl start php-fpm
# systemctl enable php-fpm

Проверяем, запустился ли он.

# netstat -tulpn | grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 9084/php-fpm: maste

Все в порядке, повис на порту 9000. Запустим его через unix сокет. Для этого открываем конфиг /etc/php-fpm.d/www.conf и комментируем строку:

;listen = 127.0.0.1:9000

Вместо нее добавляем несколько других:

listen = /var/run/php-fpm/php-fpm.sock
listen.mode = 0660
listen.owner = nginx
listen.group = nginx

Заодно измените пользователя, от которого будет работать php-fpm. Вместо apache укажите nginx.

user = nginx
group = nginx
# systemctl restart php-fpm

Проверяем, стартовал ли указанный сокет.

# ll /var/run/php-fpm/php-fpm.sock
srw-rw----. 1 nginx nginx 0 Oct 26 18:08 /var/run/php-fpm/php-fpm.sock

На текущий момент с настройкой php-fpm закончили, двигаемся дальше.

Для того, чтобы проверить работу нашего веб сервера, нужно установить ssl сертификаты. Без них nginx с текущим конфигом не запустится. Исправляем это.

Настройка бесплатного ssl сертификата Lets Encrypt

Устанавливаем пакет certbot для получения бесплатного ssl сертификата от let’s encrypt.

# yum install certbot

Запускаем программу для генерации сертификата.

# certbot certonly

Вам в консоли будут заданы несколько вопросов. Вот мои ответы, необходимые для успешного получения сертификата. Первый раз мы получим сертификаты, используя временный веб сервер самого certbot, так как наш еще не работает. Далее обновлять сертификаты будем в автоматическом режиме с помощью временной директории в корне виртуального хоста.

# certbot certonly
Saving debug log to /var/log/letsencrypt/letsencrypt.log
How would you like to authenticate with the ACME CA?
-------------------------------------------------------------------------------
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): zeroxzed@gmail.com
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A
-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: N
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c'
to cancel): hl.zeroxzed.ru
Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for hl.zeroxzed.ru
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/hl.zeroxzed.ru/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/hl.zeroxzed.ru/privkey.pem Your cert will expire on 2018-01-24. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

Для успешного создания бесплатных ssl сертификатов от lets encrypt у вас должны быть корректно настроены DNS записи для доменов, на которые выпускаются сертификаты.

Итак, сертификаты получили. Теперь можно проверить конфигурацию nginx и запустить его. Проверяем конфиг:

# nginx -t

Если получаете ошибку:

nginx: [emerg] BIO_new_file("/etc/ssl/certs/dhparam.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/ssl/certs/dhparam.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)
nginx: configuration file /etc/nginx/nginx.conf test failed

То генерируете необходимый ключ:

# openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Генерация будет длиться долго (у меня 20 минут длилось на двух ядрах). Снова проверяйте конфигурацию. Если ошибок нет, то перезапустим nginx.

# systemctl restart nginx

Настройка nginx на этом завершена. Он должен корректно запуститься и работать в рабочем режиме.

Теперь сделаем так, чтобы сертификаты автоматически обновлялись перед истечением срока действия. Для этого необходимо изменить конфигурации доменов. Они располагаются в директории /etc/letsencrypt/renewal. Так как мы генерировали сертификаты с помощью временного веб сервера, наш текущий конфиг hl.zeroxzed.ru.conf выглядит вот так:

# renew_before_expiry = 30 days
version = 0.18.1
archive_dir = /etc/letsencrypt/archive/hl.zeroxzed.ru
cert = /etc/letsencrypt/live/hl.zeroxzed.ru/cert.pem
privkey = /etc/letsencrypt/live/hl.zeroxzed.ru/privkey.pem
chain = /etc/letsencrypt/live/hl.zeroxzed.ru/chain.pem
fullchain = /etc/letsencrypt/live/hl.zeroxzed.ru/fullchain.pem
# Options used in the renewal process
[renewalparams]
authenticator = standalone
installer = None
account = e9c86e6aa57b45f9614bc7c0015927a5

Приводим его к следующему виду:

# renew_before_expiry = 30 days
version = 0.18.1
archive_dir = /etc/letsencrypt/archive/hl.zeroxzed.ru
cert = /etc/letsencrypt/live/hl.zeroxzed.ru/cert.pem
privkey = /etc/letsencrypt/live/hl.zeroxzed.ru/privkey.pem
chain = /etc/letsencrypt/live/hl.zeroxzed.ru/chain.pem
fullchain = /etc/letsencrypt/live/hl.zeroxzed.ru/fullchain.pem
# Options used in the renewal process
[renewalparams]
authenticator = webrootinstaller = None
account = e9c86e6aa57b45f9614bc7c0015927a5post_hook = nginx -s reload[[webroot_map]]www.hl.zeroxzed.ru = /web/sites/hl.zeroxzed.ru/wwwhl.zeroxzed.ru = /web/sites/hl.zeroxzed.ru/www

По аналогии делаете с остальными виртуальными хостами, для которых используете бесплатные сертификаты let’s encrypt. Осталось дело за малым — настроить автоматический выпуск новых ssl сертификатов, взамен просроченным. Для этого добавляем в /etc/crontab следующую строку:

# Cert Renewal
30 2 * * * root /usr/bin/certbot renew --post-hook "nginx -s reload" >> /var/log/le-renew.log

Все, с сертификатами закончили. Двигаемся дальше в настройке web сервера.

Установка mariadb 10 на CentOS 7

Дошла очередь до установки сервера баз данных для web сервера на CentOS 7 — MariaDB. По аналогии с другим софтом, в официальном репозитории очень старая версия mariadb — 5.5. Я же буду устанавливать последнюю стабильную версию на момент написания статьи — 10.2.

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

В моем случае конфиг получился следующий.

# cat /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Устанавливаем последнюю версию mariadb на centos.

# yum install MariaDB-server MariaDB-client

Установка MariaDB 10 на web сервер

Убедитесь, что база данных ставится из нужного репозитория.

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

# systemctl start mariadb
# systemctl enable mariadb

Запускаем скрипт начальной конфигурации mysql и задаем пароль для root. Все остальное можно оставить по-умолчанию.

# /usr/bin/mysql_secure_installation

Установка phpmyadmin

# yum install phpmyadmin

Установка phpmyadmin на nginx и php-fpm

# rm -df /web/sites/p1m2a.zeroxzed.ru/www
# ln -s /usr/share/phpMyAdmin /web/sites/p1m2a.zeroxzed.ru/www
# chown nginx:nginx /var/lib/php/session/

Доступ к сайту по sftp

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

Я же предлагаю использовать sftp по нескольким причинам:

  1. Он безопаснее.
  2. Его быстрее настроить.
  3. Не надо отдельно настраивать firewall.

Статью по настройке sftp доступа я уже тоже писал, все подробности там. Здесь без комментариев выполним необходимые действия.

Создаем пользователя для подключения к сайту. Я обычно использую имя пользователя пересекающееся с названием сайта. Так удобнее управлять.

# useradd -s /sbin/nologin hl.zeroxzed.ru
# passwd hl.zeroxzed.ru

Открываем конфиг ssh по пути /etc/ssh/sshd_config и комментируем там одну строку, добавляя далее несколько новых.

#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match User hl.zeroxzed.ru
ChrootDirectory /web/sites/hl.zeroxzed.ru
ForceCommand internal-sftp

Перезапускаем службу sshd.

# systemctl restart sshd

Этого уже достаточно, чтобы вы могли подключиться к сайту, к примеру, с помощью программы winscp. Если что-то пойдет не так и будут какие-то ошибки, то смотреть подробности нужно в логе /var/log/secure. Но тут возникает много нюансов с правами к файлам и директориям. Дальше я расскажу, как их аккуратно и грамотно разрулить, чтобы у нас не было проблем с дальнейшей работой сайтов от разных пользователей.

Работа с сайтами разных пользователей на одном веб сервере

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

# chown -R hl.zeroxzed.ru:nginx /web/sites/hl.zeroxzed.ru/
# chmod -R 0775 /web/sites/hl.zeroxzed.ru/

Но при такой схеме будут проблемы с движками сайтов, которые автоматом что-то к себе загружают. Какие-то галереи не будут работать. К примеру, wordpress не сможет автоматически загружать плагины, будет просить доступ к ftp. В общем, могут возникнуть некоторые неудобства. Сейчас мы их исправим.

Еще обращаю внимание на один нюанс. Chroot доступ для sftp не будет работать, если владельцем директории, куда чрутимся, будет не root. Только что мы сделали владельцем каталога с сайтом и всего, что внутри него пользователя hl.zeroxzed.ru. Теперь надо вернуть обратно владельцем исходного каталога рута, а все, что внутри него остается как мы и хотим — будет принадлежать hl.zeroxzed.ru.

# chown root:root /web/sites/hl.zeroxzed.ru/
# chmod 0755 /web/sites/hl.zeroxzed.ru/

А теперь сделаем все красиво. Назначаем владельцем содержимого нашего сайта только отдельного пользователя.

# chown -R hl.zeroxzed.ru:hl.zeroxzed.ru /web/sites/hl.zeroxzed.ru/

Возвращаем обратно рута владельцем корня chroot.

# chown root:root /web/sites/hl.zeroxzed.ru/
# chmod 0755 /web/sites/hl.zeroxzed.ru/

Обращаю внимание, что сначала мы рекурсивно назначаем права на все содержимое директорий, а потом возвращаем владельца root только на корень.

Добавляем пользователя nginx в группу hl.zeroxzed.ru.

# usermod -aG hl.zeroxzed.ru nginx

Создаем отдельный pool для php-fpm, который будет обслуживать сайт hl.zeroxzed.ru и будет запускаться от этого пользователя. Для этого копируем существующий конфиг /etc/php-fpm.d/www.conf и изменяем в нем несколько строк.

# cd /etc/php-fpm.d && cp www.conf hl.zeroxzed.ru.conf
[hl.zeroxzed.ru]
user = hl.zeroxzed.ru
group = hl.zeroxzed.ru
listen = /var/run/php-fpm/hl.zeroxzed.ru.sock
listen.owner = hl.zeroxzed.ru
listen.group = hl.zeroxzed.ru

Мы поменяли название пула, запустили его от отдельного пользователя и назначили ему отдельный сокет. Теперь идем в настройки этого виртуального хоста в nginx — /etc/nginx/conf.d/hl.zeroxzed.ru.conf и везде меняем старое значение сокета

fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_pass unix:/var/run/php-fpm/hl.zeroxzed.ru.sock;

Перезапускаем nginx и php-fpm и проверяем работу сайта от отдельного пользователя.

# systemctl restart nginx
# systemctl restart php-fpm

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

Ротация логов виртуальных хостов

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

У нас уже будет файл конфигурации logrotate для nginx, который был создан во время установки — /etc/logrotate.d/nginx. Приведем его к следующему виду:

/var/log/nginx/*log
/web/sites/p1m2a.zeroxzed.ru/log/*log { create 0644 nginx nginx size=1M rotate 10 missingok notifempty compress sharedscripts postrotate /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true endscript
}
/web/sites/hl.zeroxzed.ru/log/*log { create 0644 hl.zeroxzed.ru hl.zeroxzed.ru size=1M rotate 10 missingok notifempty compress sharedscripts postrotate /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true endscript
}

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

Это просто пример конфигурации. Все параметры вы можете поменять по своему усмотрению. Примеров конфигурации logrotate в интернете много.

На этом все. Я рассмотрел все основные моменты, которые необходимы для установки и настройки производительного web сервера на основе nginx и php-fpm последних версий. При этом рассказал о некоторых вещах, которые повышают удобство и гибкость эксплуатации сервера.

Заключение

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

  • Полный бэкап сервера или отдельных сайтов.
  • Мониторинг веб сервера и веб сайта с помощью zabbix.
  • Защита админки wordpress с помощью fail2ban.
  • Если у вас будут проблемы с ботами, то пригодится статья по блокировке доступа к сайту по странам.

Если еще что-то полезное вспомню, добавлю ссылки. Пока вроде все. Жду комментариев и отзывов. Написал все по своему опыту, как я обычно настраиваю веб сервера. Возможно что-то можно сделать более удобно и правильно.

Эта статья будет первой из цикла статей по настройке современного веб сервера. Далее мы будем защищать web сервер и готовить его к максимальным нагрузкам.

Напоминаю, что данная статья является частью единого цикла статьей про сервер Centos.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, научиться непрерывной поставке ПО, мониторингу и логированию web приложений, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

Проверьте себя на вступительном тесте и смотрите подробнее программу по ссылке.

Помогла статья? Подписывайся на telegram канал автора

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

Читайте также:  Укрепите свой онлайн-рейтинг с помощью методов SEO Port Web 1s
Оцените статью
Хостинги