Можно после 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, Роман Буренков <panzerc...@gmail.com>: > > А какая была бы более правильная логика? Я изначально хотел сделать 2 > правила с (?)(?!) но почему в таком regex`е у меня всё равно не тот url, > что я хотел просачивался в location ( location ~ > (?^/.*.git/info/lfs/locks$)(?!^.*&lockservice=true$)) > > вс, 26 июл. 2020 г. в 15:00, <nginx-ru-requ...@nginx.org>: > >> Сообщения, предназначенные для списка >> рассылки nginx-ru, отправляйте по адресу >> nginx-ru@nginx.org >> >> Для изменения параметров подписки или >> отписки используйте веб-страницу >> http://mailman.nginx.org/mailman/listinfo/nginx-ru >> или отправьте письмо, в теле или теме >> которого будет слово 'help', по адресу >> nginx-ru-requ...@nginx.org >> >> Адрес администратора этого списка >> рассылки: >> nginx-ru-ow...@nginx.org >> >> При ответе, пожалуйста, измените тему >> письма на более содержательную чем "Re: >> Содержание дайджеста списка рассылки >> nginx-ru..." >> В этом номере: >> >> 1. Возможно ли остановить >> выполнение правил внутри >> location/выйти из location (Роман Буренков) >> 2. Re: Возможно ли остановить >> выполнение правил внутри >> location/выйти из location (Сергей Олегович) >> >> >> >> ---------- Forwarded message ---------- >> From: "Роман Буренков" <panzerc...@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.t...@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 и поиск нового в соответствии с >> изменениями. Но мне сходу видятся проблемы, т.к. изначально логика >> построена неверно. >> >> Роман Буренков <panzerc...@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
_______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru