apache.md 6.6 KB

Web-servers && .htaccess

PHP

Исторически PHP работал, используя CGI, Common Gateway Interface.

При каждом запросе веб-сервер:

  • Принимал соединение, определял по адресу или конфигурации, что данный запрос является 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

Virtual mass hosting

Обычно в дистрибутивах linux с apache домены настраиваются путем копипасты конфига домена в папке на подобие /etc/apache2/sites.d/. Возможна так же папка /etc/apache2/sites.enabled.d/ в которой хранятся симлинки на включенные сайты. Сайты из sites.d без симлинка в этой папке выключены. Enabled сайты подключаются в основной конфиг apache через директиву Include (в конце файла).

Однако есть альтернатива: Virtual mass hosting.

Этот способ отличается упрощенным созданием и удалением доменов. Работает он благодаря следующим возможностям DNS и apache2:

  • В DNS конфигурации прописывается звездочка для поддомена: *.dev.galera.com ссылается на IP-адрес вашего сервера с apache2. Таким образом любой поддомен типа superproject.dev.galera.com будет адресован на один сервер.
  • На этом сервере имя поддомена превращается в имя папки, из которой беруться файлы сайта.
# get the server name from the Host: header
UseCanonicalName Off

# this log format can be split per-virtual-host based on the first field
# using the split-logfile utility.
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog "logs/access_log" vcommon

# include the server name in the filenames used to satisfy requests
VirtualDocumentRoot "/www/hosts/%0/docs"
VirtualScriptAlias  "/www/hosts/%0/cgi-bin"

Вместо $0 подставляется имя сервера из HTTP-заголовка. Таким образом создание нового поддомена для проекта сводится к созданию директории с именем домена.

Есть так же другие переменные, %1, %2 и так далее:

  • %1 - первый поддомен ("www" в "www.google.com", "superproject" в "superproject.dev.galera.com")
  • %2 - второй поддомен ("google" в "www.google.com", "dev" в "superproject.dev.galera.com")

Таким образом вы можете использовать более удобные имена директорий.

Подробнее: https://httpd.apache.org/docs/2.4/vhosts/mass.html

.htaccess

NGINX