ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: как правильно обновлять обработчики (бе з TERM)?



Про perl понятно, попробуем. Про ssi, наверно я невнятно выразился --
писался не обработчик SSI-инструкций, а обработчик http-ссылок в результирующих shtml-файлах. Т.е. допустим, в article.txt встретилась ссылка (без тегов), и при передаче клиенту, она будет преобразована в <a href...
И конечно это делалось с ssi on, поэтому поведение сервера вполне понятно,
непонятно почему в итоге всё вдруг заработало (но повторить это не удалось).

nginx 0.3.49
Первый вопрос -- есть ли способ перезагрузки обработчиков без жёсткого
рестарта? Насколько я понял, по -HUP обработчики перезагружаются только
если
их переименовать (и изменить имена в конфиге), а TERM не всегда можно
сказать (в каждый момент с сервера неск. сот человек чего-нибудь качают).

Что показывают "perl -V:usethreads" и "perl -V:usemultiplicity" ?

Похоже, повторный require не перекомпилирует перловые функции.
Можно попробвать два способа:

1) online upgrade: http://sysoev.ru/nginx/docs/control.html#upgrade

2) собрать perl c
   -Dusethreads или -Dusemultiplicity
При использовани этих параметров во время переконфигурации создаётся
новый перловый интерпертатор, в контексте которого выполняется require.
Без них всегда используется только один интерпертатор.

Но хочу предупредить, что ВСЕ перловые модули с бинарыми .so придётся
переустанавливать.

Второе... захотелось написать небольшой обработчик для парсинга ссылок в
shtml-файлах. Сами файлы выглядят примерно так:

<!--#include virtual="/ssi/head.shtml"-->
<!--#include virtual="./article.txt"-->
<!--#include virtual="/ssi/foot.shtml"-->

А зачем ? Это же умеет делать
http://sysoev.ru/nginx/docs/http/ngx_http_ssi_module.html

и перл он умеет вызывать:
<!--# perl sub="модуль::функция" arg="параметр1" arg="параметр2" ... -->

Собсно, написать написали, но вот прикрутить не смогли:

perl_require /opt/home/shtmlparser.pm;

  location ~* \.shtml$ {
          perl shtmlparser::handler;
      }


в итоге такого, shtml файлы начали отдаваться без обрабтки ssi-команд
(т.е.
в виде, приведённом выше), т.е. видимо произошёл какой-то внутренний
конфликт. Но самое интересное, что закомментировав эти строки и
перезагрузив
сервер по -HUP, обработчик заработал! Обнаружилось это случайно какое-то
время спустя, и повторить не удалось, но то, что ссылки подсвечивались до
след. перезагрузки -- это совершенно точно. В общем, как добиться
адекватного поведения в данном случае?

"ssi on" случаем не использовался ?


Игорь Сысоев
http://sysoev.ru





 




Copyright © Lexa Software, 1996-2009.