Re: Возможно ли остановить выполнение правил внутри location/выйти из location

Maksim Kulik kulmaks на gmail.com
Пн Июл 27 06:54:02 UTC 2020


Можно после if делать внутренний редирект на другой локейшен (если,
конечно, в вашем случае нет какой-то сложной дальнейшей обработки и вас
интересует только то, что записано в location / ) при помощи error_page. То
есть:

error_page 420 = @special_location;

location /test/lfs_lock_test.git/info/lfs/locks{
 if ( $args ~ "lockservice=true" ) {
  return 420;
  }
 rewrite ^/test/lfs_lock_test.git/(.*) /$1 break;
 proxy_pass https://localhost:5002;
 access_log  /var/log/gitlab/nginx/lfs_lock_access.log gitlab_access;
 error_log   /var/log/gitlab/nginx/lfs_lock_error.log debug;
}

location @special_location {
    proxy_cache off;
    proxy_pass  http://gitlab-workhorse;
}

пн, 27 июл. 2020 г. в 09:16, Роман Буренков <panzercheg на gmail.com>:

>
> А какая была бы более правильная логика? Я изначально хотел сделать 2
> правила с (?)(?!) но почему в таком regex`е у меня всё равно не тот url,
> что я хотел просачивался в location (  location ~
> (?^/.*.git/info/lfs/locks$)(?!^.*&lockservice=true$))
>
> вс, 26 июл. 2020 г. в 15:00, <nginx-ru-request на nginx.org>:
>
>> Сообщения, предназначенные для списка
>> рассылки nginx-ru, отправляйте по адресу
>>         nginx-ru на nginx.org
>>
>> Для изменения параметров подписки или
>> отписки используйте веб-страницу
>>         http://mailman.nginx.org/mailman/listinfo/nginx-ru
>> или отправьте письмо, в теле или теме
>> которого будет слово 'help', по адресу
>>         nginx-ru-request на nginx.org
>>
>> Адрес администратора этого списка
>> рассылки:
>>         nginx-ru-owner на nginx.org
>>
>> При ответе, пожалуйста, измените тему
>> письма на более содержательную чем "Re:
>> Содержание дайджеста списка рассылки
>> nginx-ru..."
>> В этом номере:
>>
>>    1. Возможно ли остановить
>>       выполнение правил внутри
>>       location/выйти из location (Роман Буренков)
>>    2. Re: Возможно ли остановить
>>       выполнение правил внутри
>>       location/выйти из location (Сергей Олегович)
>>
>>
>>
>> ---------- Forwarded message ----------
>> From: "Роман Буренков" <panzercheg на gmail.com>
>> To: nginx-ru на nginx.org
>> Cc:
>> Bcc:
>> Date: Sun, 26 Jul 2020 12:11:20 +0300
>> Subject: Возможно ли остановить выполнение правил внутри location/выйти
>> из location
>> Я использую gitlab 12 СE ( 12.9.2 (ac5568eb5d8) ) и nginx из поставки
>> gitlab (nginx 1.16.1 sha256:f11c2a6d )
>>
>> кусок моего location с правилами:
>>
>> location /test/lfs_lock_test.git/info/lfs/locks{
>>  if ( $args ~ "lockservice=true" ) {
>>   return 404;
>>   }
>>  rewrite ^/test/lfs_lock_test.git/(.*) /$1 break;
>>  proxy_pass https://localhost:5002;
>>  access_log  /var/log/gitlab/nginx/lfs_lock_access.log gitlab_access;
>>  error_log   /var/log/gitlab/nginx/lfs_lock_error.log debug;
>> }
>>
>> я хочу обрабатывать все запросы на  ^.*.git/info/lfs/locks внутри location,
>> только если там не содержится lockservice=true в URI, в это случае,
>> просто выйти из location ( без 404 ) ,т.к. в файле, который я правлю
>> ( /var/opt/gitlab/nginx/conf/gitlab-http.conf ) есть в т.ч. и такое:
>>
>>   location / {
>>     proxy_cache off;
>>     proxy_pass  http://gitlab-workhorse;
>>   }
>>
>> т.е. если есть  lockservice=true в URI, то не делать proxy_pass и в принципе не применять правила из моего location
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> ---------- Forwarded message ----------
>> From: "Сергей Олегович" <shadow.tehb на gmail.com>
>> To: <nginx-ru на nginx.org>
>> Cc:
>> Bcc:
>> Date: Sun, 26 Jul 2020 12:28:43 +0300
>> Subject: Re: Возможно ли остановить выполнение правил внутри
>> location/выйти из location
>> Можно в if засунуть rewrite ... last; Тогда после выполнения условия
>> будет совершён выход из этого location и поиск нового в соответствии с
>> изменениями. Но мне сходу видятся проблемы, т.к. изначально логика
>> построена неверно.
>>
>> Роман Буренков <panzercheg на gmail.com> 26 июля 2020 г. 12:11:41 написал:
>>
>>> Я использую gitlab 12 СE ( 12.9.2 (ac5568eb5d8) ) и nginx из поставки
>>> gitlab (nginx 1.16.1 sha256:f11c2a6d )
>>>
>>> кусок моего location с правилами:
>>>
>>> location /test/lfs_lock_test.git/info/lfs/locks{
>>>  if ( $args ~ "lockservice=true" ) {
>>>   return 404;
>>>   }
>>>  rewrite ^/test/lfs_lock_test.git/(.*) /$1 break;
>>>  proxy_pass https://localhost:5002;
>>>  access_log  /var/log/gitlab/nginx/lfs_lock_access.log gitlab_access;
>>>  error_log   /var/log/gitlab/nginx/lfs_lock_error.log debug;
>>> }
>>>
>>> я хочу обрабатывать все запросы на  ^.*.git/info/lfs/locks внутри location,
>>> только если там не содержится lockservice=true в URI, в это случае,
>>> просто выйти из location ( без 404 ) ,т.к. в файле, который я правлю
>>> ( /var/opt/gitlab/nginx/conf/gitlab-http.conf ) есть в т.ч. и такое:
>>>
>>>   location / {
>>>     proxy_cache off;
>>>     proxy_pass  http://gitlab-workhorse;
>>>   }
>>>
>>> т.е. если есть  lockservice=true в URI, то не делать proxy_pass и в принципе не применять правила из моего location
>>>
>>>
>>>
>>>
>>>
>>>
>>>  _______________________________________________
>>> nginx-ru mailing list
>>> nginx-ru на nginx.org
>>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>>>
>>
>> _______________________________________________
>> nginx-ru mailing list
>> nginx-ru на nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20200727/ddd838aa/attachment-0001.htm>


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