Apache2:同一 VHOST 中的 2 個 php 版本

Apache2:同一 VHOST 中的 2 個 php 版本

我正在將我的應用程式從 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”,但我沒有找到使用 Apache 將 HTTP HEADER 對應到檔案系統位置的方法。

還有其他解決辦法嗎?

[編輯]

我會盡力更好地解釋自己。

What I am trying to achieve is having 2 applications each running on a different PHP version, one being the "Main App" (the new app on PHP8.0) and redirecting to the "Second App" if route is not found by "Main應用程式".所有這一切對最終用戶來說都是完全透明的。 (相同域名,無前綴)

如果https://foo.bar.com/posts尚未遷移:主應用程式找不到路線並重定向到將提供內容的第二個應用程式。

當此端點遷移到「主應用程式」時:主應用程式找到路由並提供內容。

所以我要求一個不涉及 / 前綴或新子域的解決方案。

答案1

因此,您試圖透過管道連接特定的虛擬主機,該虛擬主機進入代理模組以存取環回上的主機?但僅有的對於 PHP 檔案?這聽起來不必要地複雜。

為什麼不在輔助連接埠上執行第二個虛擬主機,並使用 mod_proxy 來處理整個虛擬主機。 (即通常進行升級的“方法”,並且仍然面向互聯網)。

或者,您知道,您可以在遷移時為每個主機建立一個虛擬主機。然後,當「備用」URL 出現在「錯誤」主機上時,在虛擬主機之間插入簡單的重定向。

當您處理此類遷移時,請選擇最簡單的「這個與那個」的形式並以這種方式滾動。

或者,如果我完全地錯過了問題中的“詢問”...您是否在同一實例下成功運行了多個版本的 PHP?請澄清一下,坦白說......這是不是我曾經推薦的東西,因為,你知道...... PHP。 ;-)

相關內容