По идее всё просто: ПЕРЕД страницей (после HTTP-заголовков видимо)
вставить верхний layout (неважно, что после этого будет <head>,
<html>..., всё равно ДОСТАТОЧНО нормально работает); и ПОСЛЕ страницы
вставить нижний layout.
Мне казалось, что вся страница (не заголовки, они вроде как отдельно)
хранится в некой переменной (или в указателе, неважно). Поэтому
думалось что достаточно ПЕРЕД передачей этой переменной передать
верхний layout, а ПОСЛЕ передачи этой переменной передать нижний
layout.
Развитие "парсить html-ку на тему поиска <html> и вставки верхнего
layout'а точно после неё" можно оставить на (далёкое) будущее.
Было бы вкусно иметь все фичи: файлы, FastCGI, ответы некоего
http-сервера (тело опять же, без заголовков есс-но). Но файлы - это
_необходимый_ минимум :-).
И ещё: файлы, если они будет кэшированы, должны перечитываться хотя
бы по -HUP (чтобы изменения этих файлов были подхвачены).
Мне кажется, добавлять что-то перед началом ответа в настоящее время
не стоит - современные браузеры по разному воспринимают ответ с
DOCTYPE и без него.
В общем, я на данный момент планирую сделать такую функциональность
post_action:
1) post_action /uri
2) post_action_pass_body [on | off]
3) post_action_types [text/html | */*]
Аккаунтинг:
post_action /uri;
post_action_pass_body off;
post_action_types */*;
Добавление в конец ответа:
post_action /uri;
post_action_pass_body on;
post_action_types text/html;
Решил попробовать сделать модуль а-ля mod_layout собственноручно,
в помощь таким же страждущим. Всвязи с этим необходима консультативная
помощь тех, кто более-менее знает внутреннее устройство nginx (если
такие есть кроме Игоря).
Вводная: модуль должен добавлять ДО и ПОСЛЕ страницы заданные куски.
Фичность будет уточняться по мере написания/помощи.
Решил использовать шаблоном ngx_http_headers_filter_module.
Для начала вставить вместо одного из хидеров - верхний layout,
заданный директивой "layout текст_его"
ngx_http_headers_filter_module - это неудачный старт для подобной
функциональности. В принципе, добавить такой модуль мне не сложно,
нужно только оговорить функциональность. Я могу сделать следущее:
тупо добавлять в конец ответа подзапрос (это может быть статический файл,
ответ прокси или FastCGI). Никакого парсинга ответа - подзапрос будет
после </html>, так же, как сделано на narod.ru и boom.ru (и вроде
в соверменных браузерах вполне работает). Можно сделать такое же
дубовое добавление перед ответом, но я не знаю, как к этому отнесутся
бразуеры.