GNU/Linux >> Znalost Linux >  >> Ubuntu

Php Fpm funguje, ale ignorujete verzi ze Sethandleru?

Náš server je Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-135-generic x86_64).

Před časem jsme postupovali podle pokynů z https://tecadmin.net/install-multiple-php-version-apache-ubuntu/ a obnovili jsme běh PHP 5.6 a 7.2, když bylo 7.2 nové, a upgradovali jsme a přidali 7.3 a 7.4 pomocí bez problémů až do dnešního rána. Včera to fungovalo dobře, ale dnes už ne. Aktualizaci jsme zabalili včera brzy, ale nevyžadovala restart a nevěřím, že se restartovala přes noc sama o sobě jako uptime říká, že se blíží 15 dnům.

Dnes jsme se tedy pustili do procesu znovu a udělali jsme toto a po každém kroku restartovali apache2:

Vyzkoušeno:a2enmod actions fcgid alias proxy_fcgi a dostal:CHYBA:Modul fcgid neexistuje!

apt install apache2 libapache2-mod-fcgid a to fungovalo a přidal balíček.

Provedl a2enmod actions fcgid alias proxy_fcgi a bylo tam uvedeno, že je vše již povoleno .

Zkontrolovaný soubor conf v /etc/apache2/sites-enabled :

<FilesMatch .php$>
    SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost"
</FilesMatch>

Vyzkoušeno phpinfo() stránku a získal PHP 7.4.15 místo očekávaného 5.6.40. Udělali jsme totéž s 7.3 a získali jsme stejnou verzi 7.4 na phpinfo() pomocí SetHandler z php7.3.

Poté vyzkoušejte stav systemctl php5.6-fpm a php7.4-fpm a obě aktivní (běžící)

Můj /etc/apache2/conf/php5.6-fpm.conf soubor je zde pro začátečníky a ten pro php7.4-fpm.conf je stejný kromě mod_php5/7 a verze SetHandler:

# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php5.c>
<IfModule proxy_fcgi_module>
    # Enable http authorization headers
    <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    </IfModule>

    <FilesMatch ".+.ph(ar|p|tml)$">
        <If "-f %{REQUEST_FILENAME}">
            SetHandler "proxy:unix:/run/php/php5.6-fpm.sock|fcgi://localhost"
        </If>
    </FilesMatch>
    <FilesMatch ".+.phps$">
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual host or directory
        Require all denied
    </FilesMatch>
    # Deny access to files without filename (e.g. '.php')
    <FilesMatch "^.ph(ar|p|ps|tml)$">
        Require all denied
    </FilesMatch>
</IfModule>
</IfModule>

Je chyba tady nebo někde jinde, kam bych se měl podívat?

FWIW, máme další server s podobným nastavením a má stejný problém, ale v tuto chvíli potřebujeme pouze starší aplikaci 5.6 na tomto serveru, takže jsme právě deaktivovali 7.4 odstraněním souboru ukazatele v /etc/apache2/conf- enabled/php7.4-fpm.conf a restartování apache2. Tento server však potřebuje více verzí.

Související:Jak vybrat výchozí verzi Gcc a G++ v Ubuntu?

Přijatá odpověď:

Změna:

<FilesMatch .php$>
    SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost"
</FilesMatch>

pro:

<FilesMatch .php$>
   <If "-f %{REQUEST_FILENAME}">
    SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost"
   </If>
</FilesMatch>

Ubuntu
  1. Jak přepnout verzi PHP

  2. Jak downgradovat PHP z 5.3.x na 5.2.x?

  3. Přihlášení Ubuntu One Oauth z PHP?

  1. Upgradovat Ubuntu z 10.04 na 16.04 beze změny verze Apache, Mysql a PHP?

  2. Jak změnit verzi PHP

  3. Jak odinstalovat Javu z Ubuntu

  1. Upgradujte verzi PHP na 5.5 v CentOS 6

  2. Upgradujte verzi PHP z 5.3 na 5.4 v Centos6

  3. Pozastavení nefunguje po aktualizaci na Ubuntu 14.04 z 13.10?