Рейтинг:0

Apache2: 2 версии php на одном VHOST

флаг in

Я переношу свое приложение с PHP 5.6 на php 8.0, перенаправляя передний контроллер на мое устаревшее приложение или мое новое приложение в зависимости от uri.

Я пробовал с псевдонимом, и это работает, но мне нужно сохранить один и тот же хост для обоих и без псевдонима.

Например: https://foo.bar.com/my_php80_routes https://foo.bar.com/my_php56_routes

Вот моя неудовлетворительная попытка с псевдонимом

<VirtualHost *:80>
    ServerName foo.bar.com

    DocumentRoot /var/www/html/foobar/public
    # Unwanted prefix
    Alias /legacy /var/www/html/foobar/legacy/web

    <Directory /var/www/html/foobar/public>
        AllowOverride none
        Require all granted

        SetEnv APP_ENV "dev"

        # Handled by php8.0 : ok
        <FilesMatch \.php$>
            SetHandler "proxy:unix:/var/run/php/php8.0-fpm.sock|fcgi://localhost/"
        </FilesMatch>

        FallbackResource /index.php
        DirectoryIndex index.php
    </Directory>

    <Directory /var/www/html/foobar/legacy/web>
        AllowOverride none
        Require all granted

        # Handled by libapache2-mod-php5.6 : ok
        FallbackResource /app_dev.php
        DirectoryIndex app_dev.php
    </Directory>

    ErrorLog /var/log/apache2/foobar.log
    CustomLog /var/log/apache2/foobar.log combined
</VirtualHost>

Я искал другой метод, возможно, основанный на пользовательском заголовке HTTP, таком как «FOOBARAPP_LEGACY: 1», но я не нашел способа сопоставить HTTP HEADER с местоположением файловой системы с помощью Apache.

Есть ли другое решение?

[редактировать]

Я постараюсь объяснить себя лучше.

Чего я пытаюсь добиться, так это иметь 2 приложения, каждое из которых работает в другой версии PHP, одно из которых является «Основным приложением» (новое приложение на PHP8.0) и перенаправляется на «Второе приложение», если маршрут не найден «Основным Приложение". Все это совершенно прозрачно для конечного пользователя. (тот же домен, без префикса)

Если https://foo.bar.com/posts еще не перенесено: основное приложение не находит маршрут и перенаправляет на второе приложение, которое будет обслуживать контент.

Когда эта конечная точка переносится в «Основное приложение»: Главное приложение находит маршрут и обслуживает контент.

Поэтому я прошу решение, которое не включает префикс / или новый субдомен.

Рейтинг:1
флаг it
RVT

Итак, вы пытаетесь направить конкретный виртуальный хост через канал, который идет к прокси-модулю для доступа к хосту по петле??? Но Только для файлов PHP? Звучит излишне сложно.

Почему бы не запустить второй виртуальный хост на дополнительном порту и использовать mod_proxy для обработки всего виртуального хоста. (т.е. как правило, «способ» сделать обновление и при этом иметь выход в Интернет).

Или, вы знаете, вы можете буквально сделать виртуальный хост для каждого, когда вы мигрируете. А затем добавить простые перенаправления между виртуальными хостами, когда «альтернативный» URL-адрес появляется на «неправильном» хосте.

Когда вы имеете дело с таким видом миграции, выберите простейший форма «это против того» и катиться таким образом.

Или, если я полностью пропустил «спросить» в вашем вопросе... успешно ли вы запускаете несколько версий PHP в одном экземпляре? Пожалуйста, уточните, так как откровенно... это нет что-то, что я когда-либо рекомендовал, потому что, вы знаете... PHP. ;-)

флаг in
Atm Я пробовал только несколько версий php в моей локальной среде dev debian (без виртуализации), и, похоже, она работает нормально даже на одном виртуальном хосте. (modapache для 5.6 и fpm для 7.4 и 8.0). Поскольку я разработчик, а не оператор, я пока не понимаю, как ваше предложение будет работать с тем же доменом и файлом cookie phpsessid, но я попробую, спасибо.
RVT avatar
флаг it
RVT
Честно говоря, лучше всего для разработчиков использовать несколько контейнеров Docker с разными версиями и конфигурациями PHP между ними. Запуск нескольких версий одного и того же промежуточного программного обеспечения на одном и том же хосте Apache, на мой взгляд, просто «напрашивается» на путаницу (и, конечно, это НЕ то, что вы хотите случайно внедрить в производственный конвейер). Вы можете добиться того же, используя VirtualBox и Vagrant для установки и отключения виртуальных машин на вашей собственной машине. Но, в целом, я считаю, что вы должны сначала попытаться сохранить их дискретными, просто чтобы избежать потенциальных проблем.

Ответить или комментировать

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