Автор Тема: [РЕШЕНО] Apache, php5 и php7 на одном сервере  (Прочитано 1832 раз)

Оффлайн marsden

  • Давно тут
  • **
  • Сообщений: 42
То есть суть - свой сервер с белым ip, домен, поддомены. Домен работает на CMS, которой только пятерку подавай. Надо на поддомене сделать SPA на фреймворке, которому нужен php7.
В сети куча рецептов для бубунты, центос и дебиана. А кто-нибудь пробовал завести две версии на альте? Перечитал, что можно, но в голове образовалась такая каша, что просто не соображу, куда копать. При этом общее представление есть, но как это реализовать на альте - вообще никак не соображу.

[SOLVED]

В общем, как всегда - башка не варит, а руки делают.
Имеем - свежеустановленный starterkit server с профилем office, предустановлены apache, поддержка php5, IP  в локалке 192.168.0.226.
Нужна восьмерка, потому что в девятке пятый пых уже отсуствует.
Тест и все настройки делались с виндовой машины.
В винде - в файле hosts добавляем
Цитировать
192.168.0.226 test.site
192.168.0.226 test56.site
192.168.0.226 test7.site

Далее, на сервере (все делаю от рута)
Цитировать
apt-get install php5-fpm-fcgi php7-fpm-fcgi apache2-mod_fcgid

в /etc/httpd2/conf/sites-available создаем файл test.conf со следующим содержимым
Цитировать
<VirtualHost *:80>
    ServerName          www.test.site
    ServerAlias         test.site
    ServerAdmin         admin@test.site
    DocumentRoot        /var/www/vhosts/test
    ErrorLog            /var/www/vhosts/test/log/error_log_a2
    TransferLog         /var/www/vhosts/test/log/access_log_a2

    <Directory  "/var/www/vhosts/test">
        AllowOverride   All
        Require all granted
        Satisfy Any

        Options +FollowSymLinks
        Options -Indexes
        DirectoryIndex  index.php index.html
        AddDefaultCharset UTF-8

        php_flag register_globals off
        php_value memory_limit 512M
        php_value date.timezone Asia/Yekaterinburg

        <IfModule mod_rewrite.c>
            RewriteEngine on
            RewriteCond %{HTTP_HOST} ^www.test.site
            RewriteRule ^(.*)$ http://test.site/$1 [R=permanent,L]
            RewriteBase /
            RewriteCond $1 !^(index\.php|uploads|robots\.txt|favicon\.ico)
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule . /index.php [L]
        </IfModule>
        <ifModule mod_deflate.c>
            <IfModule mod_filter.c>
                AddOutputFilterByType DEFLATE text/plain text/html
                AddOutputFilterByType DEFLATE text/css
                AddoutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript
                AddOutputFilterByType DEFLATE text/xml application/xml application/xhtml+xml application/rss+xml
                AddOutputFilterByType DEFLATE application/json
                AddOutputFilterByType DEFLATE application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon
            </IfModule>
        </IfModule>
    </Directory>
</VirtualHost>

Немножко избыточно для теста, но пусть будет. Взял с рабочего конфига. Почти все настройки в апаче 2.2 были в .htaccess, теперь переехали в конфиг, поскольку есть к нему доступ и в соответствии с рекомендациями apache.org

Далее в /var/www/vhosts создаем три папки, с подпапками
Цитировать
/var/www/vhosts/test
/var/www/vhosts/test/log
/var/www/vhosts/test56
/var/www/vhosts/test56/log
/var/www/vhosts/test7
/var/www/vhosts/test7/log

На папки логов выставляем права для записи, чтобы апач мог логи писать.
В каждой папке создаем index.php следующего содержания, для наглядности в каждом меняем заголовок
Цитировать
<html><body><h1>Test.site</h1><hr>
<?
echo phpinfo();
?>

возвращаемся к конфигам. Копируем test.conf в test56.conf и test7.conf.
Редактируем test56.conf и test7.conf следующим образом
Цитировать
<VirtualHost *:80>
    ServerName          www.test56.site
    ServerAlias         test56.site
    ServerAdmin         admin@test56.site
    DocumentRoot        /var/www/vhosts/test56
    ErrorLog            /var/www/vhosts/test56/log/error_log_a2
    TransferLog         /var/www/vhosts/test56/log/access_log_a2

    ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php5-fpm/php5-fpm.sock|fcgi://localhost/var/www/vhosts/test56"
    <Directory  "/var/www/vhosts/test">
то есть, меняем все test.site (включая и то, что ниже в mod_rewrite и - самое главное - добавляем ProxyPassMatch. Для php7, соответственно, будет
Цитировать
ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php7-fpm/php7-fpm.sock|fcgi://localhost/var/www/vhosts/test7"

Далее, не забыть включить proxy, сайты, запустить php7-fpm и перезагрузить конфиги апача
Цитировать
a2enmod fcgid
a2enmod proxy
a2enmod proxy_fcgi
a2ensite test
a2ensite test56
a2ensite test7
service php7-fpm start
service httpd2 condreload

Если я ничего не пропустил и вы повторили все вдумчиво - то вэлкам в браузер и набирайте test.site, test56.site, test7.site
В каждом случае получаем вывод phpinfo, в котором сразу видно, что test.site и test56.site используют php5 (был установлен по умолчанию), а test7.site использует php7.
Разница между test.site & test56.site  в том, что первый использует mod_php5, второй php5-fpm, и test7 использует php7-fpm.
Пока дальше не копал, думаю, все будет нормально и в дальнейшем.

PS. Свежеустановленный сервер по умолчанию имеет выключенный апач, так что надо его ручками запускать, ну и в автозагрузку включить кроме апача еще и php7-fpm
« Последнее редактирование: 14.11.2019 21:14:58 от marsden »

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 926
    • Домашняя страница
    • Email
Контейнерная виртуализация?
Андрей Черепанов (cas@)

Оффлайн marsden

  • Давно тут
  • **
  • Сообщений: 42
Нет, это было бы слишком просто ))

Оффлайн marsden

  • Давно тут
  • **
  • Сообщений: 42
Хех, оказалось и так просто ))
Осталось определиться с дополнениями для семерки и подзагрузить php7-dom, php7-pdo и так далее