Apache2: 2 PHP-Versionen im selben VHOST

Apache2: 2 PHP-Versionen im selben VHOST

Ich migriere meine App von PHP 5.6 auf PHP 8.0, indem ich einen Front-Controller einschalte, der je nach URI zu meiner alten oder meiner neuen App umleitet.

Ich habe es mit einem Alias ​​versucht und es funktioniert, aber ich muss für beide genau denselben Host verwenden und keinen Alias.

Z.B: https://foo.bar.com/my_php80_routes https://foo.bar.com/my_php56_routes

Hier ist mein unbefriedigender Versuch mit Alias

<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>

Ich habe nach einer anderen Methode gesucht, die möglicherweise auf einem benutzerdefinierten HTTP-Header wie „FOOBARAPP_LEGACY: 1“ basiert, aber ich habe keine Möglichkeit gefunden, den HTTP-HEADER mit Apache einem Dateisystemspeicherort zuzuordnen.

Gibt es eine andere Lösung?

[bearbeiten]

Ich werde versuchen, es besser zu erklären.

Ich versuche, zwei Anwendungen zu haben, die jeweils auf einer anderen PHP-Version laufen, eine davon ist die „Haupt-App“ (die neue App auf PHP8.0) und die zur „Zweiten App“ umleitet, wenn die Route von der „Haupt-App“ nicht gefunden wird. All dies ist für den Endbenutzer völlig transparent. (dieselbe Domäne, kein Präfix)

Wennhttps://foo.bar.com/postsist noch nicht migriert: Die Haupt-App findet die Route nicht und leitet zur zweiten App weiter, die den Inhalt bereitstellt.

Wenn dieser Endpunkt zur „Haupt-App“ migriert wird: Die Haupt-App findet die Route und stellt den Inhalt bereit.

Deshalb bitte ich um eine Lösung, die weder ein /Präfix noch eine neue Subdomäne erfordert.

Antwort1

Sie versuchen also, einen bestimmten virtuellen Host durch eine Pipe zu leiten, die zu einem Proxy-Modul führt, um per Loopback auf den Host zuzugreifen??? Abernurfür PHP-Dateien? Das klingt unnötig kompliziert.

Warum nicht einen zweiten virtuellen Host auf einem sekundären Port ausführen und mod_proxy zum Verwalten des gesamten virtuellen Hosts verwenden (also im Allgemeinen „die Methode“, um ein Upgrade durchzuführen und es trotzdem mit dem Internet zu verbinden).

Oder Sie können während der Migration buchstäblich für jeden einen virtuellen Host einrichten. Und dann einfache Weiterleitungen zwischen den virtuellen Hosts einfügen, wenn die „alternative“ URL auf dem „falschen“ Host erscheint.

Wenn Sie mit dieser Art von Migration zu tun haben, wählen Siedas einfachsteForm von "dies gegen das" und rollen Sie in diese Richtung.

Oder, wenn ichvollständighabe das "Fragen" in deiner Frage übersehen... hast du Erfolg beim Ausführen mehrerer PHP-Versionen unter derselben Instanz? Bitte erläutere das, denn ehrlich gesagt... es istnichtetwas, was ich jemals empfehlen würde, weil, Sie wissen schon ... PHP. ;-)

verwandte Informationen