В этой инструкции мы установим 2 версии #php-fpm на веб сервере #apache под управлением операционной систему #centos 7
Предварительная подготовка
В предыдущей статье мы уже создавали виртуальную машины с Ubuntu в яндекс облаке. Нам нужно сделать тоже самое, только вместо Ubuntu мы выберем CentOS.
В CentOS по умолчанию работает SELinux, который будет нам блокировать порты. А так как SELinux не тема нашего How-to, то мы его отключим.
sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
sudo reboot
Настройка php-fpm
Для начала добавим репозитории из которых будем устанавливать php-fpm.
sudo yum -y install scl-utils
sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
Можем посмотреть список доступных версий php.
[nikolai@centos ~]$ sudo yum list php7[0-9].x86_64
Available Packages
php70.x86_64
php71.x86_64
php72.x86_64
php73.x86_64
php74.x86_64
Установим php 7.0 и 7.3 версии.
sudo yum -y install php70 php70-php-fpm php73 php73-php-fpm
По умолчанию для php-fpm используется 9000 порт и одновременно на одном порту поднять 2 версии на получится. Поэтому поменяем для php-fpm 7.0 на 9001.
sudo sed -i 's/^listen =.*/listen = 127.0.0.1:9001/' /etc/opt/remi/php70/php-fpm.d/www.conf
А для php-fpm 7.3 на 9003
sudo sed -i 's/^listen =.*/listen = 127.0.0.1:9003/' /etc/opt/remi/php73/php-fpm.d/www.conf
Проверим изменения.
[nikolai@centos ~]$ grep 'listen =' /etc/opt/remi/php*/php-fpm.d/www.conf /etc/opt/remi/php70/php-fpm.d/www.conf:listen = 127.0.0.1:9001
/etc/opt/remi/php73/php-fpm.d/www.conf:listen = 127.0.0.1:9003
В дальнейшем мы будем использовать стартовую страниц на html, поэтому разрешим её открытие в php-fpm.
sudo sed -i 's/.*security.limit_extensions =.*/security.limit_extensions = .php .php3 .php4 .php5 .php7 .html/' /etc/opt/remi/php*/php-fpm.d/www.conf
Проверим изменения.
[nikolai@centos ~]$ grep 'security.limit_extensions =' /etc/opt/remi/php*/php-fpm.d/www.conf
/etc/opt/remi/php70/php-fpm.d/www.conf:security.limit_extensions = .php .php3 .php4 .php5 .php7 .html
/etc/opt/remi/php73/php-fpm.d/www.conf:security.limit_extensions = .php .php3 .php4 .php5 .php7 .html
Поставим в автозагрузку и запустим php-fpm.
sudo systemctl enable php70-php-fpm
sudo systemctl restart php70-php-fpm
sudo systemctl enable php73-php-fpm
sudo systemctl restart php73-php-fpm
Проверим работу php-fpm на наших портах.
[nikolai@centos ~]$ sudo netstat -anp | grep 900.
tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN 1694/php-fpm: maste
tcp 0 0 127.0.0.1:9003 0.0.0.0:* LISTEN 1739/php-fpm: maste
Настройки Apache
Установим web сервер Apache.
sudo yum install httpd -y
В CentOS по умолчанию нет привычных папок sudo mkdir sites-available и sites-enabled. Создадим их.
sudo mkdir /etc/httpd/sites-{available,enabled}
Обязательно нужно включить в конфигурацию файлы из папки sites-enabled.
sudo bash -c 'echo "IncludeOptional sites-enabled/*.conf" >> /etc/httpd/conf/httpd.conf'
Посмотрим в https://console.cloud.yandex.ru/ какой у нас Публичный IPv4.
Добавим нам первый VirtualHost в Apache.
sudo bash -c 'cat > /etc/httpd/sites-available/www.51.250.107.122.nip.io.conf <<EOF
<VirtualHost *:80>
ServerName www.51.250.107.122.nip.io
ServerAdmin webmaster@localhost
DocumentRoot /var/www/www.51.250.107.122.nip.io
ErrorLog /var/www/www.51.250.107.122.nip.io/logs/error.log
CustomLog /var/www/www.51.250.107.122.nip.io/logs/access.log combined
</VirtualHost>
EOF'
Создадим для него папки.
sudo mkdir -p /var/www/www.51.250.107.122.nip.io/logs/
И сам сайт.
sudo bash -c 'echo "My site!" > /var/www/www.51.250.107.122.nip.io/index.html'
Включим наш VirtualHost в активную конфигурацию Apache.
sudo ln -s /etc/httpd/sites-available/www.51.250.107.122.nip.io.conf /etc/httpd/sites-enabled/www.51.250.107.122.nip.io.conf
Проверим конфигурацию Apache на ошибки.
[nikolai@centos ~]$ apachectl configtest
Syntax OK
Добавим Apache в автозагрузки на запустим его.
sudo systemctl enable httpd
sudo systemctl restart httpd
Откроем наш сайт http://www.51.250.107.122.nip.io/.
Создание сайта на php
Создадим папки для наших сайтов.
sudo mkdir -p /var/www/php7{0,3}.51.250.107.122.nip.io/logs/
Создадим сами сайты.
sudo bash -c 'echo "Сайт php 7.3" > /var/www/php73.51.250.107.122.nip.io/index.html'
sudo bash -c 'echo "Сайт php 7.0" > /var/www/php70.51.250.107.122.nip.io/index.html'
sudo bash -c 'cat > /var/www/php70.51.250.107.122.nip.io/info.php << EOF
<?php
phpinfo();
?>
EOF'
sudo bash -c 'cat > /var/www/php73.51.250.107.122.nip.io/info.php << EOF
<?php
phpinfo();
?>
EOF'
Добавим VirtualHost для php в Apache.
sudo bash -c 'cat > /etc/httpd/sites-available/php70.51.250.107.122.nip.io.conf <<EOF
<VirtualHost *:80>
ServerName php70.51.250.107.122.nip.io
ServerAdmin webmaster@localhost
DocumentRoot /var/www/php70.51.250.107.122.nip.io
SetHandler "proxy:fcgi://127.0.0.1:9001"
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
AddHandler php70-fcgi .php
Action php70-fcgi /cgi-bin/php70.fcgi
ErrorLog /var/www/php70.51.250.107.122.nip.io/logs/error.log
CustomLog /var/www/php70.51.250.107.122.nip.io/logs/access.log combined
</VirtualHost>
EOF'
sudo bash -c 'cat > /etc/httpd/sites-available/php73.51.250.107.122.nip.io.conf <<EOF
<VirtualHost *:80>
ServerName php73.51.250.107.122.nip.io
ServerAdmin webmaster@localhost
DocumentRoot /var/www/php73.51.250.107.122.nip.io
SetHandler "proxy:fcgi://127.0.0.1:9003"
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
AddHandler php73-fcgi .php
Action php73-fcgi /cgi-bin/php73.fcgi
ErrorLog /var/www/php73.51.250.107.122.nip.io/logs/error.log
CustomLog /var/www/php73.51.250.107.122.nip.io/logs/access.log combined
</VirtualHost>
EOF'
Обязательно удалим не нужную конфигурацию по php.
sudo rm -rf /etc/httpd/conf.d/php*-php.conf
Включим наши VirtualHost php в активную конфигурацию Apache.
sudo ln -s /etc/httpd/sites-available/php70.51.250.107.122.nip.io.conf /etc/httpd/sites-enabled/php70.51.250.107.122.nip.io.conf
sudo ln -s /etc/httpd/sites-available/php73.51.250.107.122.nip.io.conf /etc/httpd/sites-enabled/php73.51.250.107.122.nip.io.conf
Проверим конфигурацию Apache на ошибки.
[nikolai@centos ~]$ apachectl configtest
Syntax OK
Перезагрузим Apache.
sudo systemctl restart httpd
Проверяем наши сайты http://php70.51.250.107.122.nip.io/ и http://php73.51.250.107.122.nip.io.
А тепь проверим версии php этих сайтов http://php70.51.250.107.122.nip.io/info.php, http://php73.51.250.107.122.nip.io/info.php
Безопасность в Apache
Сразу поставим 2 полезных модуля для Apache.
sudo yum -y install mod_security mod_evasive
Проверим что они добавились. Если нет, то убедились вернитесь и ещё раз установити репозиторий epel.
[nikolai@centos ~]$ sudo httpd -M | grep -e security -e evasive
security2_module (shared)
evasive20_module (shared)
Как их настроить уже поговорим в следующей статье. Так что не забудьте подписаться.