Базовый сайт состоит из файлов разных типов: HTML, рисунков, JavaScript, таблиц стилей и др. Содержание этих файлов статично — оно не меняется на сервере, и вся работа вебсервера состоит в возвращении их на браузер по запросу. Вебсерверу требуется лишь незначительная конфигурация для обслуживания статических файлов.
Многие сайты также имеют динамические аспекты, включая генерирование содержимого, контроль доступа, хранение и возвращение базы данных. Простейший способ сделать статические HTMLфайлы динамическими связан с расширениями серверной стороны (SSI), являющимися особо форматированными комментария
ми для HTML, которые Apache интерпретирует для отображения значений переменных или включения содержимого других HTMLфайлов. Включение файлов SSI является для сайта, например, простым способом определения общих верхних и нижних колонтитулов для его страниц.
SSI имеет свои границы, поэтому наиболее динамичные сайты используют гораздо более мощные программы стандартного интерфейса обмена данными (CGI). Эти выполняемые программы могут быть написаны на любом языке, поддерживаемом Linux, хотя наибольшей популярностью пользуются «динамические» («сценарные») языки, такие как Perl, PHP, Python и Ruby, за которыми следует JavaScript. CGI — это протокол, указывающий, как вебклиенты и серверы должны обмениваться запросами и ответами.
Когда CGI впервые появился в Сети, его программы были полностью отделены от вебсерверов. Каждый запрос вынуждал вебсервер запускать новый процесс CGI. За счет запуска увеличивалась нагрузка на систему, и когда сайты стали загружены сильнее, были разработаны альтернативы.
Люди часто путают протокол CGI с этим более ранним методом реализации и полагают, что CGI, по существу, является медленным. Хотя стандарт CGI не определяется этой реализацией. Есть более быстрые методы, следующие тому же протоколу CGI.
Более быстрым методом является FastCGI, запускающий программу CGI как отдельный длительный процесс и управляющий двусторонней коммуникацией между ним и вебсервером. Это помогает избежать неудобств постоянной загрузки, а отделение процесса гарантирует, что, если программа CGI выйдет из строя, это не выведет из строя одновременно и весь вебсервер. FastCGI имеет один недостаток, а именно: программы FastCGI, похожие на автономные программы CGI, не могут попасть внутрь вебсервера, что может требоваться в некоторых сложных приложениях.
Некоторые программы CGI включены в модули Apache, загружаемые как части самого вебсервера: интерпретатором Perl становится mod_perl, PHP — mod_php, a mod_squad превращается в ужасную игру слов из 1970х годов. Эксплуатация программ FastCGI довольно похожа на использование модулей Apache; модули одновременно имеют преимущества и недостатки. Они имеют доступ к внутренним структурам данных и функций сервера, которые могут быть использованы на различных стадиях сетевых взаимодействий, не только для генерирования HTMLсодержимого. Однако модули увеличивают размер и использование памяти вебсервера, а ошибки в модулях могут вывести вебсервер из строя.