PHP → Коротко о CGI, FastCGI, PHP-FPM и mod_php
Решил навести в голове порядок о том, как работают вместе веб-сервер и PHP.
CGI
Common Gateway Interface, «общий интерфейс шлюза» — это стандарт, который описывает, как веб-сервер должен запускать прикладные программы (скрипты), как должен передавать им параметры HTTP-запроса, как программы должны передавать результаты своей работы веб-серверу. Прикладную программу взаимодействующую с веб-сервером по протоколу CGI принято называть шлюзом, хотя более распространено название CGI-скрипт или CGI-программа.
В качестве CGI-программ могут использоваться программы/скрипты написанные на любых языках программирования, как на компилируемых, так и на скриптовых, в том числе на shell.
CGI-скрипты были популярны до того, как для веб-разработки стали преимущественно использовать PHP. Хотя сам PHP интерпретатор позволяет работать в режиме CGI (см. ниже).
Основной момент: «CGI» это не язык программирования и не отдельная программа! Это просто протокол (стандарт, спецификация, соглашение, набор правил).
FastCGI
Дальнейшее развитие технологии CGI, является более производительным и безопасным, снимает множество ограничений CGI-программ.
FastCGI программа работает следующим образом: программа единожды загружается в память в качестве демона (независимо от HTTP-сервера), а затем входит в цикл обработки запросов от HTTP-сервера. Один и тот же процесс обрабатывает несколько различных запросов один за другим, что отличается от работы в CGI-режиме, когда на каждый запрос создается отдельный процесс, «умирающий» после окончания обработки.
Написание FastCGI программ-демонов сложнее чем CGI, нужны дополнительные библиотеки, зависящие от языка.
Опять же, сама аббревиатура FastCGI это не язык программирования и не отдельная программа, это как и в случае CGI — просто спецификация.
PHP в режиме CGI
PHP в режиме CGI это самый старый способ выполнения php-скриптов веб-сервером. Режим доступен по умолчанию, однако может быть отключён при компиляции.
Для Apache нужен модуль mod_cgi (поставляется вместе с Apache). Nginx из коробки поддержки не имеет, хотя существуют дополнительные инструменты.
В данный момент режим используется редко в силу малой производительности.
PHP в режиме FastCGI
Помимо CGI режима, PHP из коробки умеет работать и в FastCGI режиме (с версии 5.3 даже в двух FastCGI режимах). Режим включается флагом при компиляции интерпретатора, флаг зависит от версии PHP.
Для работы с Apache нужен модуль mod_fcgid или mod_fastcgi, либо связка из mod_proxy_fcgi + PHP-FPM.
Nginx умеет работать с FastCGI приложениями из коробки, но именно для PHP дополнительно нужен PHP-FPM (см. ниже).
Следует помнить, что при работе PHP в режиме FastCGI в памяти висит сам php интерпретатор, а не какой-то конкретный php-скрипт.
PHP-FPM
FastCGI Process Manager, «Менеджер процессов FastCGI». Это альтернативная реализация FastCGI режима в PHP с несколькими дополнительными возможностями, которые обычно используются для высоконагруженных сайтов.
Изначально PHP-FPM представлял из себя набор патчей от Андрея Нигматулина, которые устраняли ряд проблем, мешающих полноценно использовать PHP в режиме FastCGI (список улучшений). С версии PHP 5.3 набор патчей включён в ядро, а дополнительные возможности PHP-FPM включаются флагом при компиляции.
PHP-FPM используется в основном в связке с Nginx, без установки Apache.
mod_php
Это модуль для Apache, позволяющий ему выполнять php скрипты. Является наверно самым популярным и простым способом подружить Apache и PHP. Модуль не использует ни CGI, ни FastCGI. Есть свои минусы — скрипты работают под пользователем веб-сервера, невозможно использовать больше одной версии PHP.
Configure a Dedicated Server with Webmin
Connect via SFTP using FileZilla.
Create a new folder called cgi into the root of your selected website that you want to enable CGI scripts.
Ex : /home/stfpwebsite1/cgi
Make sure that you set the permissions of cgi folder to 755.
This setting can be done using FileZilla client.
Right-click the cgi folder and click «File permissions. »
Upload the file «hello.pl» into the cgi folder.
Make sure that also the pl file has permissions 755.
Using Webmin go to Servers > Apache Webserver.
From the «Existing virtual hosts» list select your Virtual server that you want to enable CGI scripts.
In our case is «website1 Port 80».
Now click over the «CGI Programs» icon.
At the «CGI Programs» page, under the voice «CGI Programs for website1.com:80» do :
At the «CGI directory aliases» label, fill «From» field like this : /cgi/
and «To» field like this : /home/sftpwebsite1/cgi/
Do not forget to press the «Save» button located at the bottom of the page.
Now click the «Apply changes» link located at the top right of the page.
Test if your script runs «server side» by using the link :
If you get «Hello, world!» on your browser you are good to go!
A good starting point for learning Perl is going at : learn.perl.org
PHP
PHP also know as Hypertext Preprocessor, is a server-side scripting language designed for web development.
PHP is more suitable for web applications than Perl since Perl was born way before the web era.
In order to install PHP in our dedicated server we have to log in using PuTTY and give the following two commands:
yum install php php-gd php-mysql php-mcrypt
yum install php-devel php-pecl-memcache php-pspell php-snmp php-xmlrpc php-xml php-mbstring
In order to test if the PHP is installed give the command :
You should get your current PHP version.
Once installed PHP log in to Webmin and go Servers > Apache Webserver and press the «Stop Apache» link located at the right top of the page and then click the «Start Apache» link in order to restart Apache.
Now create a new empty text file called «phpinfo.php».
Write the line below using a text editor like notepad.
Save the file.
The phpinfo() command prints a HTML page showing all the information of your PHP installation.
Upload «phpinfo.php» using FileZilla at the path : /home/sftpwebsite1/www
Test your installation using the link :
You should get the PHP Info page like below :
From the main navigation menu of Webmin by clicking «Others» > «PHP Configuration» you can edit the famous «php.ini» file.
Configuring this file is beyond the scope of this ebook.
If you want to learn PHP a great starting point is www.w3schools.com/php
In the next section we will discover how to install and manage MySQL databases.