Установка PHP FastCGI на серверы Apache, IIS

Все исходники / Язык программирования PHP / OS Windows / Веб программирование / Веб-серверы / Установка PHP FastCGI на серверы Apache, IIS
Оглавление:
  1. Настройка работы PHP на Windows
  2. Клиент-серверный протокол FastCGI
  3. Модуль FastCGI
  4. Загрузки файлов PHP
  5. Файл конфигурации php.ini
  6. Глобальная настройка PHP для сервера Apache
  7. Применение нескольких версий PHP на сервере Apache
  8. Настройка PHP для сервера IIS
  9. Заключение

Настройка работы PHP на Windows

Установка PHP для разработок веб-приложений на операционной системе Windows. В статье описывается настройка одной или нескольких версий PHP на сервер. Файлы интерпретатора PHP устанавливаются в локальные папки, без определения переменных сред. PHP будет работать в паре с серверами по протоколу FastCGI.

Описаны установки PHP для серверов: IIS, Apache. Интерпретатор одинаково хорошо работает с обоими серверами и, в большинстве случаев, можно создавать универсальные приложения для работы на любом сервере.

Перед установкой PHP необходимо наличие на компьютере рабочих веб-серверов IIS и Apache. Об установке серверов можно прочитать на Веб-сервера Апачи на Windows и Веб-сервер IIS, запуск и настройки.

Клиент-серверный протокол FastCGI

FastCGI – это более быстрая версия протокола CGI. FastCGI запускает единственный процесс, который обрабатывает множество запросов. Этот процесс загружает все необходимые библиотеки и модули при запуске и остается активным для обработки последующих запросов.

В стандартном CGI каждый запрос к серверу вызывал запуск нового процесса, что приводило к значительной нагрузке на сервер. Каждый процесс загружал необходимые библиотеки и модули, что занимало много времени и ресурсов.

FastCGI значительно ускоряет работу веб-сервера и позволяет более эффективно использовать ресурсы сервера, так как процесс остается активным для обработки запросов. Это позволяет обрабатывать большое количество запросов без перегрузки сервера.

FastCGI поддерживает множество языков программирования, например: PHP, Python, Ruby, Perl, С++ и другие. Таким образом разработчики могут использовать любой язык для создания веб-приложений. FastCGI пользуется популярностью у PHP-разработчиков, как предпочтительная альтернатива запуску mod_php в процессе сервера и устаревшему CGI.

Модуль FastCGI

Рекомендуемый PHP разработчиками модуль FastCGI mod_fcgid для сервера Апачи загружается в виде архива с сайта Apache Lounge на странице Windows Binaries and Modules. Разархивированный модуль mod_fcgid.so копируется в папку установки сервера Апачи в подпапку modules. В комплекте с модулем поставляется файл readme.txt описывающий рекомендации подключения модуля к серверу Апачи.

Для работы интерпретатора PHP в паре с сервером IIS дополнительные установки не требуются: модуль FastCGI встроен в сервер и его необходимо только активировать как показано ниже.

Загрузки файлов PHP

Архив двоичных файлов интерпретатора PHP загружаются на веб-странице PHP For Windows: Binaries and sources Releases. На настоящий момент времени последняя стабильная версия PHP 8.2. Для режима работы FastCGI необходимо скачать версию Non Thread Safe. Вариант Thread Safe предназначен для работы PHP в качестве модуля сервера Apache mod_php.

Если ваша операционная система 64-разрядная загружаем х64 версию как более прогрессивную, если 32 разрядная – х86 версию. Для загрузки выбираем архив Zip и скачиваем его в выбранную папку на компьютере.

После загрузки архива рекомендуется проверить целостность скачанного файла путем сравнения хеш суммы полученного файла с указанной на странице загрузки рядом со ссылкой на архив. Для этого в командной строке, вызванной из папки нахождения файла (в адресной строке проводника набрать cmd и нажать Enter) выполняем команду:
certutil -hashfile имя_файла SHA256
например:
certutil -hashfile php-8.2.4-nts-Win32-vs16-x64.zip SHA256

Команда проверки хеш суммы файла
Проверка хеш суммы архива PHP

Суммы совпадают – все в порядке, не совпадают - архив необходимо скачать заново. Далее разархивируем Zip файл в папку, созданную для работы интерпретатора PHP, папка может размещаться в любом месте на вашем устройстве. В дальнейшем, в настройках сервера необходимо будет прописать путь до соответствующего исполнительного файла PHP.

Файл конфигурации php.ini

Для корректной работы PHP интерпретатора необходимо определить его настройки в специальном файле php.ini. Это текстовый файл конфигурации, используемый для определения различных настроек и параметров движка PHP. php.ini содержит директивы, управляющие поведением PHP на сервере. Файл обычно расположен в корневом каталоге установки PHP.

В комплекте архива интерпретатора идут две заготовки для формирования собственного файла php.ini:
php.ini-development – настройки работы PHP для нужд разработок веб-приложений с выводом всех ошибок;
php.ini-production – для работы на рабочем сервере. Он содержит рекомендуемые параметры для обеспечения безопасности и производительности интерпретатора на рабочем сервере.

php.ini может быть отредактирован вручную с помощью любого текстового редактора. Посмотреть настройки php.ini можно через веб-интерфейс, выполнив php-файл с кодом:
<?php phpinfo(); ?>

Перед первым запуском PHP необходимо создать файл php.ini из включенных в дистрибутив загрузки. На локальном компьютере для целей разработки рациональней использовать копию php.ini-development, сократив расширение до .ini. Обычно развитые веб-фреймворки сайтов имеют список требований настроек интерпретатора PHP и часто подсказывают отсутствие их включения.

Глобальная настройка PHP для сервера Apache

Глобальная настройка, как правило, определяется в конце файла httpd.conf. Такая настройка обычно определяется если с сервером будет работать единственный PHP интерпретатор или необходимо определить общие директивы для различных версий PHP.

Для файловых путей слеши прописываются только прямые (наклон направо), иначе неправильные слеши сервер воспримет как ошибку и не запустится. Добавьте в ваш файл Apache httpd.conf строки с директивами:

 LoadModule fcgid_module modules/mod_fcgid.so
<Files ~ "\.php$">
    AddHandler fcgid-script .php
    Options +ExecCGI
</Files>
FcgidWrapper "D:/MyProjects/PHP/php-8.2.4-nts-Win32-vs16-x64/php-cgi.exe" .php
# Строка примера пути с пробелами к местонахождению файла PHP
#FcgidWrapper "C:/Program\ Files/IIS\ Express/PHP/v8.2/php-cgi.exe" .php

Расшифровка директив:

LoadModule fcgid_module modules/mod_fcgid.so – команда для загрузки сервером Apache модуля FastCGI.

<Files ~ "\.php$"> - директива ограничивает область действия вложенных директив по имени или расширению файлов. Директивы в данном разделе будут применяться только к файлам с расширением php.

AddHandler fcgid-script .php – сопоставление указанного обработчика (в нашем случае FastCGI) с форматом файла. После того, как это было помещено в ваш файл httpd.conf, любой файл, содержащий расширение .php будет обрабатываться внешним обработчиком по протоколу FastCGI. Можно указать несколько расширений. Следует внимательно относиться к написанию данной директивы на рабочем сервере: при её отсутствии скриптовые файлы PHP могут обрабатываться как текстовые файлы, с выводом программного кода.

Options +ExecCGI – директива, разрешающая выполнение CGI программ. Область действия данной директивы можно ограничить другими директивами, например <VirtualHost>, <Directory>, <Files>.

FcgidWrapper "D:/MyProjects/PHP/php-8.2.4-nts-Win32-vs16-x64/php-cgi.exe" .php – данная команда используется для создания процессов FastCGI сервера Apache. Если путь к исполняемому файлу содержит пробелы, то они должны экранироваться обратными слешами как показано выше в коде. Директиву можно использовать несколько раз.

Применение нескольких версий PHP на сервере Apache

При одновременной работе с несколькими веб-приложениями могут потребоваться разные версии интерпретаторов PHP без перезагрузки сервера. Веб-сервер Апачи позволяет запускать несколько процессов FastCGI для разных версий PHP.

Решение для использования нескольких версий PHP заключается в ограничении действия каждого отдельного интерпретатора директивой виртуального хоста <VirtualHost>.

Код для конфигурации сервера Apache с разной версией PHP в каждом виртуальном хосте:
 <VirtualHost 127.0.0.1:80>
    DocumentRoot "${HOSTROOT}/localphpadmin"
    ServerName localphpmyadmin

    # Создается процесс FastCGI для интерпретатора по указанному пути.
    # Процесс взаимодействует только с данным виртуальным хостом.
    FcgidWrapper "C:/Program\ Files/IIS\ Express/PHP/v8.2/php-cgi.exe" .php

    # Other directives here
    <Directory />
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>


<VirtualHost 127.0.0.1:80>
    DocumentRoot "${HOSTROOT}/localphp"
    ServerName localphp

    # Создается процесс FastCGI для интерпретатора по указанному пути.
    # Процесс только для localphp.
    FcgidWrapper "D:/MyProjects/PHP/php-8.2.4-nts-Win32-vs16-x64/php-cgi.exe" .php
    
    <Directory />
        AllowOverride All
        Require all granted
    </Directory>>
</VirtualHost>


<VirtualHost 127.0.0.1:80>
    DocumentRoot "${HOSTROOT}/localwp"
    ServerName localwp
    
    # Создается процесс FastCGI для интерпретатора по указанному пути.
    # Процесс только для localwp.
    FcgidWrapper "D:/MyProjects/PHP/php-7.4.33-nts-Win32-vc15-x64/php-cgi.exe" .php
    
    <Directory />
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

# Общие настройки для всех процессов FastCGI
LoadModule fcgid_module modules/mod_fcgid.so
<Files ~ "\.php$">
    AddHandler fcgid-script .php
    Options +ExecCGI
</Files>

Настройка PHP для сервера IIS

Настройка обработки PHP файлов на сервере IIS предусматривает предварительное создание сайта. Как создавать сайты для сервера IIS можно подробно прочитать на странице Веб-сервер IIS, запуск и настройки .

Для работы веб-приложений по протоколу FastCGI необходимо включить поддержку исполняемых файлов CGI для сервера IIS. Для этого в панели управления Windows откройте вкладку Панель управления->Программы->Программы и компоненты и щелкните на пункт Включение и отключение компонентов Windows. В открывшемся окне откройте пункты: Службы IIS->Службы Интернета->Компоненты разработки приложений и галочкой активируйте пункт CGI.

Включение CGI на сервере IIS
Включение службы CGI

Для сервера IIS можно также задать отдельный обработчик PHP для конкретного сайта. Для этого откройте окно Диспетчера служб IIS. Выделите на вкладе Подключения название сайта, который будет обрабатываться интерпретатором PHP. Далее на средней вкладке, в области IIS дважды щелкните на значок Сопоставление обработчиков. После этого в середине откроется список обработчиков и на вкладке справа меню добавления обработчиков.

Сопоставления обработчиков IIS
Сопоставления обработчиков IIS

Добавить сопоставление модуля на IIS
Добавить сопоставление модуля на IIS
На вкладке справа щелкните пункт Добавить сопоставление модуля. В диалоговом окне заполните окна редактирования:
- Путь запроса (фильтр для ваших файлов PHP) - напечатайте расширения ваших файлов, например, *.php или, если необходимо несколько расширений, *.php, *.php74, *php56.
- Модуль – выберите FastCgiModule.
- Исполняемый файл – укажите путь до файла php-cgi.exe (можно нажать кнопку с многоточием справа и в окне визуально выбрать требуемый файл).
- Имя – напечатайте условное имя для вашего обработчика, желательно чтобы имя было уникальным в пределах сервера. В примере кода файла web.config добавлена строка <remove name="PHP74_33" /> на случай неуникальности имени процесса FastCGI, смотрите ниже.
Нажмите кнопку Ок, в открывшемся окошке нажмите кнопку Да.
Окно добавления сопоставления модуля IIS
Заполнение окна сопоставления модуля FastCGI

После этих процедур в корневом каталоге сайта служба IIS создаст файл конфигурации web.config. Данный файл можно также создавать вручную или скопировать и отредактировать готовые от других сайтов, консультируясь с документацией XML и web.config файлов. Таким образом можно для каждого сайта определять отдельную версию PHP.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <defaultDocument>
            <files>
                <add value="index.php" />
            </files>
        </defaultDocument>
        <handlers>
            <!-- Строка на случай неуникальности имени FastCGI процесса -->
            <remove name="PHP74_33" />
            <add name="PHP74_33" path="*.php" verb="*" 
            modules="FastCgiModule" 
            scriptProcessor="D:\MyProjects\PHP\php-7.4.33-nts-Win32-vc15-x64\php-cgi.exe" 
            resourceType="File" />
        </handlers>
    </system.webServer>
</configuration>

Заключение

Для различных версий серверов Apache, IIS и операционных систем Windows настройки подключения интерпретатора PHP по протоколу FastCGI могут незначительно отличаться, но алгоритм действий будет одинаковый для всех конфигураций.

Описание настроек работы интерпретатора PHP предназначено для целей разработки и отладки веб-приложений на локальном компьютере. Вопросы настроек безопасности не рассматривается в данной статье.