Nginx с PHP и MySQL (LEMP) на RHEL 7.0

Nginx с PHP и MySQL (LEMP) на RHEL 7.0 Хостинг

Автор выбрал Apache Software Foundation для получения пожертвования в размере $100 в рамках программы Write for DOnations.

Содержание
  1. Введение
  2. Предварительные требования
  3. Шаг 1 — Активация репозитория Software Collections
  4. Шаг 2 — Установка сервера Web Nginx
  5. Шаг 3 — Установка MariaDB для управления данными сайта
  6. Шаг 4 — Установка и настройка PHP
  7. Шаг 5 — Настройка Nginx для использования процессора PHP
  8. Шаг 6 — Создание файла PHP для тестовой конфигурации
  9. Заключение
  10. Introduction
  11. Prerequisites
  12. Step 1 — Adding the EPEL Software Repository
  13. Step 2 — Installing Nginx
  14. Step 3 — Starting Nginx
  15. Step 4 — Exploring and Configuring Nginx
  16. Default Server Root
  17. Server Block Configuration
  18. Nginx Global Configuration
  19. Conclusion
  20. Предпосылки
  21. Шаг 1. Установка Nginx
  22. Шаг 2. Установка MariaDB
  23. Шаг 3. Установка PHP
  24. Шаг 4. Настройка Nginx для обработки страниц PHP
  25. Больше информации
  26. Install Nginx on CentOS 7 using CentOS Nginx repository.
  27. Create Nginx CentOS Repository for CentOS 7
  28. yum install nginx
  29. Allow HTTP Protocol From the Firewall
  30. Install PHP-FPM on CentOS 7
  31. Configure PHP-FPM
  32. Configure Nginx for PHP-FPM
  33. Create Nginx Virtual Host
  34. Install Nginx Web Server on CentOS 7 using epel repository
  35. Подключение репозитория, обновление сервера
  36. Установка и настройка веб-сервера Nginx
  37. Установка php-fpm и дополнительных модулей php
  38. Установка Let’s Encrypt и подключение сертификата
  39. Установка MySQL/MariaDB на веб сервере
  40. Настройка Nginx и PHP-FPM для высоконагруженных проектов
  41. Настройка nginx
  42. Настройка php-fpm
  43. 1 Предварительные замечания
  44. 2 Включение дополнительных систем хранения
  45. 4 Установка Nginx
  46. 5 Установка PHP
  47. 6 Настройка nginx
  48. 7 Использование Unix-сокета для PHP-FPM

Введение

Стек ПО LEMP — это группа программного обеспечения с открытым исходным кодом, которая обычно устанавливается вместе, чтобы на сервере могли размещаться динамические веб-сайты и веб-приложения. Этот термин представляет собой акроним, представляющий операционную систему Linux с веб-сервером ENginx (который заменяет Apache в стеке LAMP). Данные сайта хранятся в базе данных MySQL (используется MariaDB), а за динамическое содержание отвечает PHP.

Компоненты стека LEMP иногда устанавливаются с помощью репозитория EPEL CentOS 7. Однако этот репозиторий содержит устаревшие пакеты. Например, вы не можете установить версию PHP старше 5.4.16 из EPEL, хотя этот релиз не поддерживается уже длительное время. Для получения новых версий программного обеспечения рекомендуется использовать набор Software Collections, также известный как SCL. SCL — это коллекции ресурсов для разработчиков, предоставленные RedHat, которые позволяют использовать различные версии программного обеспечения в одной и той же системе без какого-либо влияния на ранее установленные пакеты.

В этом руководстве вы установите стек LEMP на сервер с CentOS 7. Операционная система CentOS отвечает за работу компонентов Linux. Вы установите остальные компоненты с помощью репозитория Software Collections, а затем настроите их для обслуживания простой веб-страницы.

Предварительные требования

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

Шаг 1 — Активация репозитория Software Collections

Для получения доступа к SCL для CentOS установите release-файл для Software Collections в CentOS:

  1. yum centos-release-scl

Просмотрите список доступных пакетов SCL с помощью следующей команды:

  1. yum list available

Для предотвращения конфликтов в рамках всей системы пакеты SCL устанавливаются в директорию /opt/rh. Это позволяет установить, например, Python 3.5 на компьютере с CentOS 7 без удаления или вмешательства в работу Python 2.7.

Все файлы конфигурации для пакетов SCL хранятся в соответствующей директории внутри директории /etc/opt/rh/. Пакеты SCL содержат скрипты, которые определяют переменные среды, необходимые для использования приложений внутри пакета, например, PATH, LD_LIBRARY_PATH и MANPATH. Эти скрипты хранятся в файловой системе в каталоге /opt/rh/package-name/enable.

Теперь вы можете начать установку пакетов, описанных в этом руководстве.

Шаг 2 — Установка сервера Web Nginx

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

Установите Nginx с помощью следующей команды yum. Обязательно замените выделенное значение версией Nginx, которую вы хотите установить; самая последняя версия будет иметь самый большой номер в имени пакета (112 на момент написания статьи):

  1. yum rh-nginx112

После завершения установки запустите службу Nginx:

  1. systemctl start rh-nginx112-nginx

Проверьте, что Nginx запущен с помощью команды systemctl status​​​:

  1. systemctl status rh-nginx112-nginx
● rh-nginx112-nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/rh-nginx112-nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2018-03-19 15:15:43 UTC; 1min 17s ago
 Main PID: 10556 (nginx)
   CGroup: /system.slice/rh-nginx112-nginx.service
           ├─10556 nginx: master process /opt/rh/rh-nginx112/root/usr/sbin/nginx
           ├─10557 nginx: worker process
           └─10558 nginx: worker process

Mar 19 15:15:43 lemp-centos-222 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: the configuration file /etc/opt/rh/rh-nginx... ok
Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: configuration file /etc/opt/rh/rh-nginx112/...ful
Mar 19 15:15:43 lemp-centos-222 systemd[1]: Started The nginx HTTP and reverse proxy server.
Hint: Some lines were ellipsized, use -l to show in full.

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

  1. yum firewalld

После этого вы сможете запустить службу firewalld:

  1. systemctl start firewalld

Затем добавьте ряд правил брандмауэра, чтобы разрешить доступ SSH-доступ к вашему серверу и подключение через HTTP и HTTPS к Nginx:

  1. firewall-cmd --add-servicessh
  2. firewall-cmd public --add-servicehttp
  3. firewall-cmd public --add-servicehttps

Перезапустите firewalld для вступления в силу новых правил брандмауэра:

  1. firewall-cmd

Подробнее о firewalld см. в статье Настройка брандмауэра с помощью FirewallD в CentOS 7.

  1. icanhazip.com
http://server_domain_or_IP

Страница Nginx по умолчанию

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

  1. systemctl rh-nginx112-nginx

Шаг 3 — Установка MariaDB для управления данными сайта

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

Установите MariaDB с помощью следующей команды. Снова замените выделенное значение номером версии, которую вы хотите установить, самый большой номер является номером самой последней версии (102 на момент написания):

  1. yum rh-mariadb102

После завершения установки запустите службу MariaDB с помощью следующей команды:

  1. systemctl start rh-mariadb102-mariadb

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

Для обеспечения безопасности MariaDB устанавливается вместе с скриптом безопасности, который напоминает вам о необходимости изменения небезопасных настроек по умолчанию. Запустите скрипт, введя следующую команду:

  1. /opt/rh/rh-mariadb102/enable
  2. mysql_secure_installation

Вам потребуется ввести ваш текущий пароль root. Так как вы только что установили MySQL, у вас нет пароля, поэтому оставьте это поле пустым и нажмите ENTER. После этого вам будет предложено установить пароль root. Введите Y и следуйте этим инструкциям:

. . .
Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorization.

Set root password? [Y/n] Y
New password: password
Re-enter new password: password
Password updated successfully!
Reloading privilege tables..
 ... Success!
. . .

Для остальных вопросов нажмите клавишу ENTER для использования значения по умолчанию. В результате вы должны удалить ряд анонимных пользователей и тестовую базу данных, отключить возможность удаленного входя для root и загрузить эти новые правила, чтобы MariaDB немедленно использовала внесенные нами изменения.

Последнее, что нужно сделать, — это активировать для MariaDB запуск при загрузке сервера. Для этого используйте следующую команду:

  1. systemctl rh-mariadb102-mariadb

В данный момент ваша система базы данных настроена, и вы можете переходить к настройке PHP на своем сервере.

Шаг 4 — Установка и настройка PHP

Теперь у вас есть Nginx для обслуживания ваших страниц и MariaDB для хранения и управления данными, однако у вас до сих пор не установлено ПО, которое может генерировать динамическое содержание. Именно для этого и нужен PHP.

Поскольку Nginx не поддерживает нативную обработку PHP, как некоторые другие веб-серверы, вам потребуется установить php-fpm, т.е. «менеджер процессов fastCGI». Затем вы должны будете настроить Nginx, чтобы передавать PHP-запросы этому программному продукту.

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

  1. yum rh-php71-php-fpm rh-php71-php-mysqlnd

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

Откройте главный файл конфигурации php.ini с правами root:

  1. /etc/opt/rh/rh-php71/php.ini

В этом файле вам нужно найти параметр, который устанавливает значение для cgi.fix_pathinfo. Он будет закомментирован с помощью точки с запятой (;) и имеет значение «1» по умолчанию.

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

Измените оба эти условия, разкомментировав строку и установив значение «0»:

cgi.fix_pathinfo=0

Сохраните и `закройте файл после завершения редактирования (нажмите ESC, введите :wq, а затем нажмите ENTER).««`

Теперь откройте файл конфигурации php-fpm по адресу www.conf​​​​:

  1. /etc/opt/rh/rh-php71/php-fpm.d/www.conf
user = nginx
group = nginx

Затем сохраните и закройте файл.

Теперь запустите процессор PHP с помощью следующей команды:

  1. systemctl start rh-php71-php-fpm

Активируйте запуск php-fpm при загрузке:

  1. systemctl rh-php71-php-fpm

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

Шаг 5 — Настройка Nginx для использования процессора PHP

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

Это изменение конфигурации выполняется уровне блока server (блоки сервера похожи на виртуальные хосты в Apache). Откройте файл конфигурации сервера Nginx по умолчанию, введя следующую команду:

  1. /etc/opt/rh/rh-nginx112/nginx/nginx.conf

Раскомментируйте блок location ~ \.php$ (сегмент файла, обрабатывающий запросы PHP и находящийся внутри блока server) и его содержимое, удалив символ решетки (#) в начале строки. Также вам нужно обновить параметр fastcgi_param и указать значение SCRIPT FILENAME $document_root$fastcgi_script_name. Это позволит PHP узнать местоположение документа root, где он сможет найти файлы для обработки.

Читайте также:  Теория и практика редиректа, настройки и правила использования

После внесения необходимых изменений блок server будет выглядеть следующим образом:

...
server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
    root         /opt/rh/rh-nginx112/root/usr/share/nginx/html;

    # Load configuration files for the default server block.
    include      /etc/opt/rh/rh-nginx112/nginx/default.d/*.conf;

    location / {
    }

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

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

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}
...

После внесения необходимых изменений вы можете сохранить файл и закрыть редактор.

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

  1. /opt/rh/rh-nginx112/enable
  2. nginx

При появлении сообщений о каких-либо ошибках, вернитесь и повторно проверьте ваш файл, прежде чем продолжать.

После подтверждения корректности файла конфигурации перезагрузите Nginx, чтобы внесенные вами изменения вступили в силу:

  1. systemctl reload rh-nginx112-nginx

Теперь, когда Nginx, PHP и MariaDB были установлены и настроены, осталось только подтвердить, что настройка стека LEMP способна корректно предоставлять содержание для посетителей вашего сайта.

Шаг 6 — Создание файла PHP для тестовой конфигурации

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

Откройте новый файл с названием info.php внутри корневой директории документа:

  1. /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

Добавьте в новый файл следующую строку. Это корректный код PHP, который будет возвращать информацию о вашем сервере:

<?php phpinfo(); ?>
http://server_domain_or_IP/info.php

Вы увидите веб-страницу, сгенерированную PHP, с информацией о вашем сервере:

Страница PHP с информацией

Если ваша страница выглядит таким образом, вам удалось успешно реализовать обработку PHP с помощью Nginx.

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

Удалите файл, введя следующую команду:

  1. /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

Вы успешно подтвердили, что все компоненты стека LEMP установлены и настроены корректно на вашем сервере.

Заключение

Теперь у вас в распоряжении есть полностью настроенный стек LEMP на вашем сервере с CentOS 7. Он будет служить гибкой основой для предоставления веб-контента вашим посетителям.

SCL также используется для установки различных версий программного обеспечения и переключения между ними. Вы можете просмотреть список всех установленных в системе коллекций с помощью следующей команды:

  1. scl

Дополнительную информацию о Software Collections вы можете найти на официальном сайте.

Introduction

Nginx is a popular high-performance web server. This tutorial will teach you how to install and start Nginx on your CentOS 7 server.

Prerequisites

The steps in this tutorial require a non-root user with sudo privileges. See our Initial Server Setup with CentOS 7 tutorial to learn how to set up this user.

Step 1 — Adding the EPEL Software Repository

To add the CentOS 7 EPEL repository, first connect to your CentOS 7 machine via SSH, then use the yum command to install the extended package repository:

  1. yum epel-release

You’ll be prompted to verify that you want to install the software. Type y then ENTER to continue.

Next, you’ll install the actual nginx software package.

Step 2 — Installing Nginx

  1. yum nginx

Again, answer yes to the verification prompt, then Nginx will finish installing.

Step 3 — Starting Nginx

Nginx will not start automatically after it is installed. To get Nginx running, use the systemctl command:

  1. systemctl start nginx

You can check the status of the service with systemctl status:

  1. systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2022-01-24 20:14:24 UTC; 5s ago
  Process: 1898 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 1896 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 1895 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 1900 (nginx)
   CGroup: /system.slice/nginx.service
           ├─1900 nginx: master process /usr/sbin/nginx
           └─1901 nginx: worker process

Jan 24 20:14:24 centos-updates systemd[1]: Starting The nginx HTTP and reverse proxy server...
Jan 24 20:14:24 centos-updates nginx[1896]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Jan 24 20:14:24 centos-updates nginx[1896]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Jan 24 20:14:24 centos-updates systemd[1]: Started The nginx HTTP and reverse proxy server.

The service should be active.

  1. firewall-cmd public --add-servicehttp
  2. firewall-cmd public --add-servicehttps
  3. firewall-cmd

You can do a spot check right away to verify that everything went as planned by visiting your server’s public IP address in your web browser:

http://server_domain_name_or_IP/

You will see the default CentOS 7 Nginx web page, which is there for informational and testing purposes. It should look something like this:

CentOS 7 Nginx Default

If you see this page, then your web server is now correctly installed.

Note: To find your server’s public IP address, find the network interfaces on your machine by typing:

  1. addr
1. lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN

. . .
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

. . .

You may see a number of interfaces here depending on the hardware available on your server. The lo interface is the local loopback interface, which is not the one we want. In our example above, the eth0 interface is what we want.

  1. addr show eth0 inet
  1. systemctl nginx

Nginx is now installed and running.

Step 4 — Exploring and Configuring Nginx

If you want to start serving your own pages or application through Nginx, you will want to know the locations of the Nginx configuration files and default server root directory.

Default Server Root

Server Block Configuration

Nginx Global Configuration

Conclusion

Once you have Nginx installed on your CentOS 7 server, you can go on to install the full LEMP Stack on 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

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

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

The Nginx Web Server is a good Alternative for the Apache Web Server. While Apache is still the most commonly used web server, Nginx is a Lightweight Web Server design for the high trafficking websites.

In This Tutorial We are going to Learn How to Install Nginx on CentOS 7 with php-fpm enable.

The Nginx Web Server still does not come with the official CentOS 7 repository, But We have several methods available to install nginx on CentOS 7.

One method to install nginx using the repository provides by the Nginx itself, another method is to use fedora epel repository. And also We can install nginx from the source.

In This this tutorial first we are going to install nginx on CentOS 7 using Nginx CentOS 7 repository and configure php-fpm for Nginx Web Server.

How to Install Nginx on CentOS 7 with PHP-FPM

Install Nginx on CentOS 7 using CentOS Nginx repository.

The Preferred method to install nginx on CentOS 7 is to use the Software repository Provides by the Nginx. First, we Create the .repo file and then install nginx using yum install command.

Create Nginx CentOS Repository for CentOS 7

First, create a file called nginx.repo inside the /etc/yum.repos.d directory.

Save the nginx.repo file and run the yum repolist command to make sure that the repository is active.

yum install nginx

Now we can install centos nginx using yum command.

yum install nginx

After the installation is finished, start and enable nginx using systemctl command.

systemctl start nginx

systemctl enable nginx

Allow HTTP Protocol From the Firewall

Next adds firewall rules to allow http service to the outside using firewall-cmd command.

Now if typed IP address of your server on the web browser you will get default nginx welcome page.

CentOS Nginx Default Server Page

  • Location of the Nginx Main Configuration File in CentOS 7 is /etc/nginx/nginx.conf file.
  • Default Document root is /usr/share/nginx/html/ folder.

Install PHP-FPM on CentOS 7

Nginx works with php-fpm which stands for PHP FastCGI Process Manager. We can easily install php-fpm on CentOS 7 using yum command.

yum install php-fpm

php-fpm on CentOS 7 run as a service, so we need to start and enable php-fpm using systemctl command.

systemctl start php-fpm

systemctl enable php-fpm

Configure PHP-FPM

First open the /etc/php-fpm.d/www.conf file and change value of listen from listen = 127.0.0.1:9000 to listen = /var/run/php-fpm/php-fpm.sock.

listen = /var/run/php-fpm/php-fpm.sock

Next, open the /etc/php.ini file and set the value of cgi.fix_pathinfo to 0 (uncomment the line if it’s been commented).

Now, Restart the centos php-fpm service using systemctl command.

systemctl restart php-fpm

Configure Nginx for PHP-FPM

listen       80;

index  index.php index.html index.htm;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

And restart the centos nginx Web Server.

systemctl restart nginx

Create Nginx Virtual Host

Just like Apache Web Server, Nginx Also allows to host multiple website on the same server. So Let’s see an example how to configure a virtual host on CentOS 7 Nginx Web Server.

So first create the document root using the mkdir command.

Create the configuration file for example.con inside the /etc/nginx/conf.d directory with .conf extension.

server_name example.com www.example.com;

error_log /var/log/nginx/example.error.log warn;

access_log /var/log/nginx/example.access.log main;

index index.php index.html index.htm;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Finally, Save the configuration file and restart the centos nginx web server.

systemctl restart nginx

So that is how we can install nginx on CentOS 7 using nginx CentOS 7 Repository. Next We Will See How to Install nginx using fedora epel-release.

Install Nginx Web Server on CentOS 7 using epel repository

The Fedora Epel repository also provides nginx for CentOS 7. First, we enable epel release and then install the nginx web server using yum install command.

yum install epel-release

yum install nginx

For the default site, you should create a configuration file inside the /etc/nginx/default.d directory.

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

So This is the end of This Tutorial. We Learned How to Install and Configure Nginx on CentOS 7 Linux with PHP-FPM Enabled.


PHP-FPM (Fast Process Manager) – это отдельная реализация обработчика FastCGI для выполнения PHP скриптов. На базе связки веб-сервера NGINX (который обрабатывает статику) и PHP-FPM вы можете построить более быстрый и производительный веб-сервер для своих веб-проектов по сравнению с использованием «классической» связки NGINX, Apache и модуль mod_php (стек LAMP).

LEMP – набор программного обеспечения с открытым исходным кодом, которая обычно устанавливается совместно для запуска на сервере для размещения веб-сайтов и веб-приложений. Этот аббревиатурой обозначающет набор ОС Linux с веб-сервером Nginx (он заменяет Apache в более распространенном стеке LAMP), с БД MySQL (MariaDB) и c php для обработки динамических данных.

В данной статье мы рассмотрим установку и оптимизацию стека LEMP для размещения нагруженного веб-проекта на сервере с CentOS 7 на базе связки NGINX+ PHP-FPM + MariaDB/MySQL + установим для сайта SSL сертификата Let’s Encrypt .

Подключение репозитория, обновление сервера

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

# yum install epel-release -y
# yum update -y

Репозиторий установился, но пакетов для обновлений не найдено, так как установлен свежий образ CentOS.

centos - обновление сервера

Установка и настройка веб-сервера Nginx

Для установки свежей версии Nginx, подключим репозиторий разработчика, выполнив команду:

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

Или создав конфигурационный файл репозитория /etc/yum.repos.d/nginx.repo со следующим содержимым:

[nginx]  

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

Если вы используете CentOS 8, измените версию в URL.

Установите пакет веб-сервера Nginx с помощью менеджера пакетов yum (или dnf):

# yum install nginx -y

установка nginx веб-сервера в centos linux

Теперь можно запустить nginx и добавить его в автозагрузку с помощью systemctl:

# systemctl start nginx
# systemctl enable nginx

Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

nginx установлен

Если у вас тестовая страница не открылась, проверьте настройки разрешенных служб, портов, зон в firewalld на своем сервере.

Настроим конфигурационный файл для отдельного домена build-centos.info. Создадим для сайта отдельную директорию и сам конфигурационный файл:

# mkdir -p /var/www/build-centos.info && mkdir -p /var/www/build-centos.info/log

Откроем файл конфигурации:

# nano /etc/nginx/conf.d/build-centos.info.conf

И добавим в него следующее содержимое:

server {
    listen 80;
    server_name build-centos.info;
    root /var/www/build-centos.info;
    index index.php index.html index.htm;
    access_log /var/www/build-centos.info/log/access.log main;
    error_log /var/www/build-centos.info/log/error.log;

    location / {
    return 301 https://build-centos.info$request_uri;
    }

    location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
    return 301 https://build-centos.info$request_uri;
    }

    location ~ \.php$ {
    return 301 https://build-centos.info$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.build-centos.info;
     rewrite ^ https://build-centos.info$request_uri? permanent;
}

server {
    listen 443 ssl http2;
    server_name build-centos.info;
    root /var/www/build-centos.info;
    index index.php index.html index.htm;
    access_log /var/www/build-centos.info/log/ssl-access.log main;
    error_log /var/www/build-centos.info/log/ssl-error.log;

    keepalive_timeout           60;
    ssl_certificate             /etc/letsencrypt/live/build-centos.info/fullchain.pem;
    ssl_certificate_key         /etc/letsencrypt/live/build-centos.info/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';
    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_index index.php;
    fastcgi_param DOCUMENT_ROOT /var/www/build-centos.info;
    fastcgi_param SCRIPT_FILENAME /var/www/build-centos.info/$fastcgi_script_name;
    fastcgi_param PATH_TRANSLATED /var/www/build-centos.info/$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.build-centos.info;
     rewrite ^ https://build-centos.info$request_uri? permanent;
}

Конфигурационный файл содержит настройки для доступа по защищенному протоколу https, так как многие популярные CMS в данный момент по умолчанию работают через него. В дальнейшем мы установим и настроим бесплатный SSL сертификат Let’s Encrypt (по аналогии с установкой Let’s Encrypt сертификата на IIS сайта в Windows Server).

Установка php-fpm и дополнительных модулей php

В Nginx нет встроенного обработчика PHP, поэтому мы должны установить php-fpm и ряд модулей php, которые будут использоваться для обработки PHP скриптов.

Php-fpm это очень легкий и быстрый менеджер процессов PHP. Он не использует HTTP протокол (как apache), и работает со специальным протоколом FastCGI. За счет легковесности и простоты FPM позволяет намного быстрее обрабатывать PHP запросы. При этом, в сравнении с аналогичной конфигурацией с apache, памяти будет использоваться намного меньше.

Nginx в свою очередь дает существенный выигрыш при отдаче статики. В нашей конфигурации ngnix будет выступать прокси-сервером (кэширующим и front-end сервером), а в качестве бэкенда будет работать php-fpm.

Для установки свежих версий php, используем репозиторий REMI:

# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

После установки, отредактируйте файл /etc/yum.repos.d/remi-php74.repo:

настройка репозитория remi для php

Запустите установку php-fpm и популярных модулей php:

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

установка php-fpm и популярных модулей php

Запустите сервис php-fpm и добавитье его в автозагрузку:

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

Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.

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

# lsof -i:9000

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php-fpm 1551 root 7u IPv4 2078435 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 1552 apache 9u IPv4 2078435 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 1553 apache 9u IPv4 2078435 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 1554 apache 9u IPv4 2078435 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 1555 apache 9u IPv4 2078435 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 1556 apache 9u IPv4 2078435 0t0 TCP localhost:cslistener (LISTEN)

Сервис php-fpm нужно запустить через 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 (по-умолчанию), укажите следующие параметры в конфигурационном файле:

user = nginx
group = nginx

После изменения конфигурационного php-fpm нужно перезапустить сервис:

# systemctl restart php-fpm

Установка Let’s Encrypt и подключение сертификата

Чтобы выпустить бесплатный сертификат Let’s Encrypt, нужно установить нужное certbot.

# yum install certbot

# certbot certonly

После запуска команды, вам нужно будет заполнить все данные, указав почтовый ящик, домен и так далее:

# 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): [email protected]
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): build-centos.info
Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for build-centos.info
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/build-centos.info/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/build-centos.info/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.

Чтобы сертификат был корректно выпущен, ваш домен должен быть существующим и направлен на соответствующий веб-сервер.

После выпуска сертификата, выполните перезагрузку веб-сервера nginx и проверье результат.

# systemctl restart nginx

ssl сертфикат для сайта

Соединение в браузере защищено!

Для автоматического продление сертификатов измените конфигурационный файл /etc/letsencrypt/renewal/build-centos.info.conf следующим образом:

# renew_before_expiry = 30 days
version = 0.18.1
archive_dir = /etc/letsencrypt/archive/ build-centos.info
cert = /etc/letsencrypt/live/build-centos.info/cert.pem
privkey = /etc/letsencrypt/live/build-centos.info/privkey.pem
chain = /etc/letsencrypt/live/build-centos.info/chain.pem
fullchain = /etc/letsencrypt/live/build-centos.info/fullchain.pem

После изменения файла, добавьте в крон задание:

Читайте также:  Краткое руководство: скачайте VPS легко и сразу

30 2 * * * root /usr/bin/certbot renew --post-hook "nginx -s reload"

Чтобы проверить, что nginx работает с php, я создал файл index.php и добавил в него:

<?php phpinfo(); ?>

nginx + php-fpm проверка работы php скрипта

Установка MySQL/MariaDB на веб сервере

Данный шаг мы полностью пропустим, так как на сайте уже есть статья по установке и тюнингу MariaDB. Воспользуйтесь ей.

Настройка Nginx и PHP-FPM для высоконагруженных проектов

Чтобы ваш веб-сервер работал с высокой производительностью и мог обработать большое количество запросов от клиентов, одного железа недостаточно. Важно правильно настроить работу связки nginx и php-fpm.

Настройка nginx

Откройте файл /etc/nginx/nginx.conf и изменит конфигурацию Nginx следующим образом:

  • worker_processes 2;
    — уставите количество рабочих процессов равным количеству ядер на сервере.
  • worker_connections 1024;
    — определяет количество соединений одного рабочего процесса. Выставляйте значения от 1024 до 4096.
  • use epoll;
    — оптимальный вариант метода соединений для Linux.
  • multi_accept on;
    — nginx будет принимать максимальное количество соединений.
  • tcp_nodelay on;
    — отправляет заголовки и начало файла в одном пакете.
  • tcp_nopush on;

Для проектов в которых содержится большое количество статических файлов, обязательно включайте gzip сжатие:

Добавьте большое количество типов файлов, чтобы все проверки на googlespeed проходили:
gzip_types application/atom+xml application/javascript text/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json font/ttf application/x-font-ttf application/vnd.ms-fontobject application/font-woff application/font-woff2 application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vnd.wap.wml text/vtt text/x-component text/x-cross-domain-policy;

Настройка сжатия позволит ускорить ваш проект.

  • keepalive_timeout 30;
    — веб-сервер будет ожидать 30 секунд, прежде чем закрыть keepalive соединения
  • keepalive_requests 100;
    — максимальное количество keepalive запросов от одного клиента
  • reset_timedout_connection on;
    — включите данный параметр, если не хотите, чтобы соединение от клиента, который перестал отвечать, сбрасывались.
  • client_body_timeout 10;
    — веб-сервер будет ждать 10 секунд подтверждение запроса от клиента, по истечению этого времени, соединение сбросится.
  • send_timeout 2;
    — если клиент прекращает чтение ответа от веб-сервера, nginx сбросит соединение с ним.

Если на вашем сайте не предусмотрена загрузка больших файлов, ограничьте это с помощью nginx:

  • client_max_body_size 2m;
    — сервер не примет запросы больше 2 Мб.

оптимизация конфигурации nginx для нагруженных проектов

Если контент на вашем проекте меняется не так часто, вы можете использовать кеширование «expires max;» Либо добавьте соответствующую опцию в конфигурационный файл вашего хоста для нужного типа файлов, например:

Кеш для указанных типов файлов будет хранится 7 дней. Вы можете управлять кешем с помощью данной функции. После всех модификаций, не забывайте выполнять перезапуск nginx:

# systemctl restart nginx

Настройка php-fpm

При установке php-fpm вы сразу перевели его на unix-сокет. Это дает существенных прирост в производительности. По оценкам производительность вырастает в 2-3 раза. Остальные же параметры php-fpm нужно настраивать под каждый проект отдельно, рассмотрим пример настройки для сервера с 1024 Мб памяти.

Для php-fpm мы можем выделить примерно 512 мб, оставив остальное под БД и nginx.

В конфигурационный файл /etc/php-fpm/www.conf, добавим:

  • pm.max_children = 18
    — максимальное число дочерних процессов
  • pm.start_servers = 6
    — число дочерних процессов, создаваемых при запуске
  • pm.min_spare_servers = 4
    — минимальное число неактивных процессов сервера
  • pm.max_spare_servers = 16
    — максимальное число неактивных процессов сервера
  • pm.max_requests = 400
    — число запросов дочернего процесса, после которого процесс будет перезапущен.

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

На текущий сервер я сразу же установил последнюю версию CMS Bitrix, для проверки производительности. На мой взгляд это самая ресурсоемкая CMS и результаты получились неплохие, если учитывать, что это виртуальная машина на KVM с одним ядром (vCPU) и 1024 ОЗУ:

тест производительности bitrix на nginx + php-fpm

Оптимизацию настроек MariaDB я не расписывал, так как есть соответствующая статья на сайте. Я сформировал параметры для my.cnf по статье и база показала отличный результат.

При запуске сайте вы заметите невооруженным взглядом, что nginx + php-fpm будет намного быстрее обрабатывать ваши запросы и возвращать страницы, чем apache2 + mod_php. Если у вас есть возможность провести нагрузочные тесты во время настройки сервера, то это несомненно будет плюсом, если же такой возможности нет, вы можете изменить параметры для своих ресурсов исходя из нашего мануала.

Данная статья является переработанной версией исходной статьи, созданной для предыдущей версии дистрибутива CentOS 6.5.

1 Предварительные замечания

Предполагается, что в локальной сети доступна аппаратная платформа, на которой уже установлен CentOS 7.0.

2 Включение дополнительных систем хранения

Nginx недоступен из официальных систем хранения CentOS 7.0, поэтому сначала добавим систему хранения Nginx для его последующей установки:

mcedit /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

Сначала установим Mariadb. Mariadb является свободным ответвлением MySQL. Для установки запустим yum со следующими параметрами:

install -y mariadb mariadb-server net-tools

Cоздадим ссылки на автозагрузку для MySQL (MySQL будет загружаться автоматически при старте системы) и запустим сервер MySQL:

systemctl enable mariadb.service
systemctl start mariadb.service

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

netstat -tap | grep mysql

Если появилось подобное сообщение:

[root]# netstat -tap | grepmysql
tcp 0 0 0.0.0.0:mysql 0.0.0.0:* LISTEN 10623/mysqld
mysql_secure_installation

для задания пароля администратора (иначе кто-угодно может получить доступ к вашим базам данных MySQL):

[root]# mysql_secure_installation
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found

4 Установка Nginx

Nginx доступен для скачивания с на сайте разработчика, для установки запустим yum со следующими параметрами:

yum install -y nginx

Затем создадим ссылку на автозагрузку nginx и затем запустим саму программу:

systemctl enable nginx.service
systemctl start nginx.service

У вас может появится ошибка типа: порт 80 уже используется, ошибка будет иметь следующий вид:

Ошибка появляется в том случае, если запущена служба apache. Остановим apache и запустим службу NGINX:

systemctl stop httpd.service
yum -y remove httpd
systemctl disable httpd.service
systemctl enable nginx.service
systemctl start nginx.service

И откроем http и https порты в брандмауэре

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

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

[root@example ~]# firewall-cmd --permanent --zone=public --add-service=http
success
[root@example ~]# firewall-cmd --permanent --zone=public --add-service=https success
[root@example ~]# firewall-cmd --reload success

nginx-start-page

Поздравляю с получением промежуточного результата!

5 Установка PHP

Интерпретатор PHP версии 5 взаимодействует с nginx через PHP-FPM (PHP FastCGI Process Manager), которая является альтернативой PHP Fast CGI, с некоторыми дополнительными функциями, полезными для сайтов любого размера, особенно для оживлённых сайтов. Установим php-fpm вместе с php-cli и некоторыми PHP5 модулями, например,php-mysql, который потребуется для использования MySQL в ваших PHP скриптах, для установки запустим yum со следующими параметрами:

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

APC представляет собой бесплатный и открытый кэшер выполнимого кода для PHP, который кэширует и оптимизирует промежуточный код PHP. APC схож с другими кэшерами для PHP, такими как: eAccelerator и Xcache. Рекомендуется установить любую из этих модулей для ускорения работы страницы PHP.

Установим APC из хранилища PHPpecl. PECL требуется наличие установленного инструментария Centos Development tools, для того, чтобы скомпилировать пакет APC. Для установки запустим yum со следующими параметрами:

yum install -y php-devel
yum groupinstall 'Development Tools'

Мы готовы к установке APC

pecl install -y apc

В процессе установки необходимо будет подтвердить настройки программы клавишей Enter.

Затем откроем /etc/php.ini и установим значение cgi.fix_pathinfo=0:

[...]
; cgi.fix_path info provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting
; of zero causes PHP to behave as before. Default is 1. You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]

И в конце добавим строку:

[...]
extension=apc.so

Постараемся избежать ошибок часового пояса типа:

PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings.
You are *required* to use the date.timezone setting or the date_default_timezone_set() function.

[...]
[Date]
; Defines the default timezone used by the date functions
date.timezone = "Europe/Moscow"
[...]

Определить часовой пояс на нашей системе можно следующим образом:

cat /etc/sysconfig/clock

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

systemctl enable php-fpm.service
systemctl start php-fpm.service

PHP-FPM является процессом (со скриптом init /etc/init.d/php-fpm), который запускает FastCGI сервер на порте 9000.

6 Настройка nginx

Откроем файл конфигурации nginx, /etc/nginx/nginx.conf:

Первым делом можно увеличить число запущенный процессов (для высоконагруженных сайтов auto заменить на удвоенное число ядер процессора) и установить максимальное время поддержания keepalive-соединения:

[...]
worker_processes auto;
[...]
keepalive_timeout 2;
[...]

Виртуальные хосты определены на сервере в директории /etc/nginx/conf.d. Теперь отредактируем стандартный vhost (mcedit /etc/nginx/conf.d/default.conf) следующим образом:

[...]
server {
listen 80;
server_namelocalhost;
#кодировка koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
location / {
root ;
index index.html index.htm;
}
#error_page 404 /404.html;
# перенаправление ошибок сервера на статическую страницу /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root ;
}
#}
# передача PHPскриптов на сервер FastCGI по адресу 127.0.0.1:9000
location ~ \.php$ {
root ;
try_files $uri =404;
fastcgi_pass127.0.0.1:9000;
fastcgi_indexindex.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params;
}
# запретить доступ к файлам .htaccess
location ~ /\.ht {
deny all;
}
}

server_name _; создает стандартное хранилище vhost (если вы определили имя хоста).

В разделе /part, добавим index.php к строке индекса. Путь ; означает, что корневая директория расположения сайтов находится в .

PHP-FPM стандартно работает с портом 9000 по адресу 127.0.0.1, поэтому зададим nginx подключиться к 127.0.0.1:9000 со строкой fastcgi_pass 127.0.0.1:9000;. Так же возможно использование PHP-FPM сокета- рассмотрим это в главе 7.

Теперь сохраним файл и перезапустим nginx:

service nginx reload

Создадим файл PHP в корневой директории расположения сайтов .

<!--?php 
<?
phpinfo();
?>

Затем откроем файл в браузере (например http://10.4.0.10/info.php)

PHP5 работает через FPM/FastCGI, как показано в строке ServerAPI. Внизу страницы представлена информация о подключенных модулях, в том числе и MySQL.

7 Использование Unix-сокета для PHP-FPM

Использование Unix-сокета позволит избежать издержек TCP. Как правило, PHP-FPM использует порт 9000 по адресу 127.0.0.1. Откроем файл /etc/php-fpm.d/www.conf и отредактируем следующим образом:

[...]
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php5-fpm.sock
[...]

Затем перезагрузим PHP-FPM:

systemctl restart php-fpm.service

Теперь в конфигурации nginx изменим строку fastcgi_pass 127.0.0.1:9000; на fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock; это будет выглядеть следующим образом:

[...]
location ~ \.php$ {
root ;
try_files $uri =404;
fastcgi_passunix:/var/run/php-fpm/php5-fpm.sock;
fastcgi_indexindex.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
[...]

В конце снова перезапустим nginx:

systemctl restart nginx.service

Можно разворачивать сайты.

Оцените статью
Хостинги