|
@@ -2,12 +2,66 @@
|
|
|
|
|
|
## PHP
|
|
|
|
|
|
-### `mod_php`
|
|
|
+Исторически **PHP** работал, используя **CGI**, Common Gateway Interface.
|
|
|
|
|
|
-### `php-fpm`
|
|
|
+При каждом запросе **веб-сервер**:
|
|
|
+- Принимал соединение, определял по адресу или конфигурации, что данный запрос является **CGI**
|
|
|
+- Создавал набор переменных окружения (например данные в `$_SERVER` попадают из переменных окружения) с характеристиками запроса
|
|
|
+- Запускал процесс, обрабатывающий **CGI** запрос, передавая ему на стандартный ввод тело **HTTP** запроса
|
|
|
+- Процесс обрабатывал **HTTP** запрос, стандартный вывод процесса перенаправлялся **веб-сервером** клиенту в браузер. По окончанию обработки запроса процесс прекращал свою работу.
|
|
|
+
|
|
|
+Именно из **CGI** **PHP** унаследовал модель работы *Designed To Die*.
|
|
|
+
|
|
|
+### Современные интерфейсы между **PHP** и **веб-сервером**
|
|
|
+
|
|
|
+#### FastCGI
|
|
|
+
|
|
|
+**FastCGI** - современная, улучшенная версия **CGI**, в которой:
|
|
|
+- Для ускорения обработки запросов *процессы не запускаются при каждом запросе, а постоянно работают, обрабатывая множество запросов*
|
|
|
+- Общение с процессом происходит не через стандартные потоки ввода-вывода, а через сокеты (сетевые соединения или сокеты в файловой системе), что позволяет разнести **FastCGI** процессы на множество других серверов
|
|
|
+
|
|
|
+Однако некоторые недостатки **FastCGI** привели к появлению...
|
|
|
+
|
|
|
+#### PHP FastCGI Process Manager (php-fpm)
|
|
|
+
|
|
|
+Улучшенный **FastCGI**. Этот способ в основном используется в связке с **nginx**
|
|
|
+
|
|
|
+#### `mod_php`
|
|
|
+
|
|
|
+Классика, самый обычный способ конфигурации **PHP** с **веб-сервером** **Apache**. Кодовая база **PHP** подключается как модуль **веб-сервера** и работает "изнутри" веб-сервера. Достоинство этого подхода в простоте настройки и скорости работы. Недостатки же
|
|
|
+вытекают из достоинств: слабая масштабируемость, зависимость от **веб-сервера**, меньшая безопасность, отсутствие возможности гибко конфигурировать версии **PHP**.
|
|
|
|
|
|
## Apache
|
|
|
|
|
|
+Часто используемый для обычных проектов и разработки **веб-сервер**. **PHP** обычно неплохо работает с настройками по умолчанию.
|
|
|
+
|
|
|
+### Основные настройки
|
|
|
+
|
|
|
+Для подключения **PHP** в настройках где-то (обычно в /etc/apache2/) должна быть следующая строка, или строка, подобная этой:
|
|
|
+
|
|
|
+```
|
|
|
+LoadModule php5_module modules/mod_php.so
|
|
|
+```
|
|
|
+
|
|
|
+Эти же строки добавляют связь между расширением файла и модулем php для обрабоки этих файлов:
|
|
|
+
|
|
|
+```
|
|
|
+<FilesMatch "\.(php|php[57]|phtml)$">
|
|
|
+ SetHandler application/x-httpd-php
|
|
|
+</FilesMatch>
|
|
|
+```
|
|
|
+
|
|
|
+`DirectoryIndex` указывают **веб-серверу**, что кроме `index.html` нужно обрабатывать и `index.php`:
|
|
|
+
|
|
|
+```
|
|
|
+ DirectoryIndex index.php index.phtml
|
|
|
+```
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
### `.htaccess`
|
|
|
|
|
|
## NGINX
|