Назад | Перейти на главную страницу

PHP 7 и 5.6 параллельно в Nginx

Я хочу использовать PHP 7 с новыми приложениями и PHP 5.6 с приложениями, которые не работают с PHP 7. Поэтому я пытаюсь настроить Nginx для включения разных версий PHP для разных путей. Но не работает:

 # should enable PHP5 for all PHP-scripts under /vexim/ path
 location ^~ /vexim/.*\.php$ {
     include snippets/fastcgi-php.conf;
     fastcgi_pass unix:/var/run/php5-fpm.sock;
 }

И по умолчанию для всего остального должен быть PHP 7:

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}

При такой конфигурации скрипты PHP в / vexim / вообще не анализируются. Как заставить это работать с разными путями и версиями PHP?

(Используется Debian 8.3 Jessie, Nginx 1.8.1 (dotdeb), PHP 5.6, PHP 7 (dotdeb))

location ^~ не является расположением регулярного выражения, это расположение префикса, которое имеет приоритет над всеми расположениями регулярного выражения.

Видеть этот документ для подробностей.

Вероятно, вы хотите:

location ~ ^/vexim/.*\.php$ { ... }
location ~ \.php$ { ... }

Убедитесь, что /vexim location появляется на первом месте по мере упорядочения местоположений регулярных выражений.