Re: proxy_store и переменные

jd на jdwuzhere.ru jd на jdwuzhere.ru
Пн Фев 11 06:10:34 UTC 2019


Большое спасибо!

> On 11 Feb 2019, at 04:04, Maxim Dounin <mdounin на mdounin.ru> wrote:
> 
> Hello!
> 
>> On Mon, Feb 11, 2019 at 12:40:53AM +0300, Vladimir Sopot wrote:
>> 
>> Строим вот такой просто кэшер уменьшенной статики. Для простоты 
>> добавляем это в nginx.conf.default
>> 
>> resolver 8.8.8.8;
>> 
>> server {
>>    listen *:80;
>>    server_name “~^cache-(\d).domain.ru$";
>>    set $store_id $1;
> 
> Так делать в сколько-нибудь сложных конфигурациях нельзя.
> 
> После любого внутреннего перенаправления - серверные rewrite'ы 
> отрабатают заново, и "set" будет использовать $1 от последнего 
> выполневшегося регулярного выражения.  И в вашем случае это будет 
> совсем не регулярное выражение из server_name.
> 
> Если хочется вытаскивать какую-либо информацию из server_name - 
> это надо делать с помощью named captures, как-то так:
> 
>   server_name ~^cache-(?<store_id>\d)\.domain\.ru$;
> 
> [...]
> 
>> Всё работает, ничего не кэшируется. Раскомментирую proxy-store и 
>> получается ад: в $store_id попадает всё, что матчится (.+\.jpg) 
>> и складывается в 
>> '/wwwroot/domain.ru/cache-/path/to/original/jpg/request' 
>> <http://domain.ru/cache-/path/to/original/jpg/request'>, 
>> например. То есть $store_id почему-то перезаписывается следующим 
>> $1. Почему так и как это исправить, кроме как делать отдельный 
>> server{} для каждого $store_id?
> 
> См. выше.  Не надо использовать нумерованные выделения в 
> сколько-нибудь сложных конструкциях.  В декларативном конфиге 
> nginx'а предугадать, какое регулярное выражение было выполнено 
> последним - редко когда возможно, и подчас их их использование 
> ведёт к появлению проблем в самых неожиданных местах.
> 
> -- 
> Maxim Dounin
> http://mdounin.ru/
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru


Подробная информация о списке рассылки nginx-ru