Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: rewrite в именованный location
Борис Долгов пишет:
Это было бы интересно.
А сейчас если есть 1000 виртхостов с одинаковой конфигурацией, все это
будет дублироваться в памяти?
Мне кажется, можно даже ввести что-то типа
http {
configuration x {
fastcgi_pass ....
прочее;
}
server {
location @php {
use x;
}
location ~\.php$ {
use x;
}
}
}
которые все будут храниться в памяти только 1 раз.
В случае с хэшами даже если специально не выделять одинаковые блоки, то
конфигурации будут использоваться повторно.
Если модуль написан правильно, то для него две конфигурации с одинаковым
хэшем равнозначны.
В частности в конструкции:
location /a {
if (...) {
return 404;
}
}
на конфигурацию блока if потребуется столько памяти, сколько занимает
конфиграция модуля rewrite, а не столько, сколько занимает вся
конфигурация /a. Тоже самое с limit_except и прочее.
Однако это сложнее программировать, поскольку придется помнить про хэши.
30 июля 2009 г. 14:40 пользователь Valery Kholodkov
(valery+nginxru@xxxxxxxxxxx) написал:
Igor Sysoev пишет:
Этот же код из @fcgi дублируется еще в двух location-ах, поскольку
извращаться с искусственным перенаправлением ошибки мне не хотелось. А
так везде можно написать goto @fcgi; - что будет и компактнее и
понятнее и проще поддерживать.
На мой взгляд, такое синтаксически нужно делать так:
location ~\.php$
@fcgi
...
{
...
}
Кстати, это ещё и сэкономит память. Только там есть одна проблема в том,
что имя location'а хранится в конфигурации. Как сделать, чтобы несолько
location'ов имели одну и ту же конфигруацию - пока не знаю.
Можно создавать один location для каждого аргумента директивы, но в то же
время дедуплицировать конфигурацию хешем. Это к тому же исключит все
остальные случаи дуплицирования конфигурации.
--
Best regards,
Valery Kholodkov
--
Best regards,
Valery Kholodkov
|