Welcome! Log In Create A New Profile

Advanced

Re: allow/deny and return

Gena Makhomed
October 16, 2013 10:02AM
On 15.10.2013 19:57, Maxim Dounin wrote:

> Все директивы модуля rewrite - это в той или иной степени выбор
> конфигурации, даже если они unconditional. E.g., банальный set:
>
> set $file ".htpasswd";
> auth_basic_user_file /path/to/$file;
>
> так или иначе определяет конфигурацию, которая будет в дальнейшем
> использоваться для обработки запроса. Выполнять сначала
> access-проверки, и только потом директивы модуля rewrite - ни разу
> не вариант.

а если выполнять сначала только set (внутри location и внутри if)
потом access фазу и потом уже все остальные директивы модуля rewrite?
тогда и обратная совместимость с set не сломается и access-проверки
сработают всегда раньше, чем "опасные" директивы return и rewrite.

кстати, если добавить директиву handler, которая работает после фазы
try_files, то можно будет писать конфиг nginx без лишней избыточности:

location /admin {
satisfy any;
set $file ".htpasswd";
auth_basic_user_file /path/to/$file;
allow 10.1.1.1;
deny all;
handler @default;
}

location / {
handler @default;
}

location /for-test/ {
if ($arg_test=123) {
handler @special; # проблем не должно быть
}
handler @default;
}

location @default {
root ...;
try_files $uri $uri/ =404;
location ~ \.php$ {
root ...;
try_files $uri @virtual;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param QUERY_STRING $args;
}
}

location @virtual {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
fastcgi_param SCRIPT_NAME /index.php;
fastcgi_param QUERY_STRING q=$uri&$args;
}

>>>> по крайней мере, в UNIX и даже в WINDOWS все работает именно так:
>>>> если доступа к файлу нет, никаких операций с ним сделать нельзя.
>>
>>> В Антоном конфиге нет файла. Есть инструкция "при выборе
>>> конфигурации для обработки запросов вернуть ответ с кодом 200".
>>
>> файла нет. но есть location /closed и есть директивы задания доступа
>> кому allow, а кому deny. то что return срабатывает раньше deny - это
>> будет совершенно неожиданно для более чем 99% пользователей nginx...
>
> С якобы багом разобрались - отлично. Возвращаемся к исходному
> разговору - если есть идеи, как _хорошо_ объяснить пользователям,
> почему так - you are welcome.

почему return/rewrite работает раньше access - я смог нормально понять
только после того, как прочитал http://www.aosabook.org/en/nginx.html
начиная со слов "Which brings us to the phases." причем, вот этой:

...the request goes through six phases:

1. server rewrite phase
2. location phase
3. location rewrite phase (which can bring the request back to the
previous phase)
4. access control phase
5. try_files phase
6. log phase

очень важной информации нет в официальной документации.

кстати, если пользователи столкнутся с ситуацией, что access-обработчики
не работают в location где используется return и rewrite -
они в первую очередь буду искать причину в документации
к соответствующим access модулям, а не в модуле rewrite

> Аналогичный конфиг, кстати, рассматривается в подробностях тут:
>
> http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#internals

весь остальной псевдокод после "match of regular expression" разве
не должен быть с отступом в 4 пробела, таким же как и у "return 403" ?

--
Best regards,
Gena

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

allow/deny and return

Anton Yuzhaninov October 15, 2013 08:28AM

Re: allow/deny and return

Maxim Dounin October 15, 2013 08:46AM

Re: allow/deny and return

Ruslan Ermilov October 15, 2013 08:54AM

Re: allow/deny and return

Gena Makhomed October 15, 2013 09:00AM

Re: allow/deny and return

Maxim Dounin October 15, 2013 09:46AM

Re: allow/deny and return

Gena Makhomed October 15, 2013 12:16PM

Re: allow/deny and return

Maxim Dounin October 15, 2013 01:00PM

Re: allow/deny and return

Oleksandr V. Typlyns'kyi October 16, 2013 03:40AM

Re: allow/deny and return

Gena Makhomed October 16, 2013 10:02AM

Re: allow/deny and return

Maxim Dounin October 16, 2013 11:22AM

Re: allow/deny and return

Gena Makhomed October 16, 2013 12:58PM

Re: allow/deny and return

Maxim Dounin October 16, 2013 01:34PM

Re: allow/deny and return

Gena Makhomed October 16, 2013 02:30PM

Re: allow/deny and return

Maxim Dounin October 16, 2013 07:20PM

Re: allow/deny and return

Gena Makhomed October 17, 2013 08:56AM

Re: allow/deny and return

Maxim Dounin October 17, 2013 10:10AM

Re: allow/deny and return

Gena Makhomed October 17, 2013 02:14PM

Re: allow/deny and return

Maxim Dounin October 18, 2013 07:42AM

Re: allow/deny and return

Gena Makhomed October 18, 2013 09:20AM

Re: allow/deny and return

Maxim Dounin October 18, 2013 09:52AM

Re: allow/deny and return

Gena Makhomed October 20, 2013 09:28AM

Re: allow/deny and return

Maxim Dounin October 21, 2013 08:38AM

Re: allow/deny and return

Илья Шипицин October 21, 2013 09:02AM

Re: allow/deny and return

Maxim Dounin October 21, 2013 11:50AM

Re: allow/deny and return

Gena Makhomed October 21, 2013 01:46PM

Re: allow/deny and return

Maxim Dounin October 21, 2013 02:38PM

Re: allow/deny and return

Gena Makhomed October 21, 2013 05:46PM

Re: allow/deny and return

Maxim Dounin October 21, 2013 06:34PM

error_page 404 и ngx_http_index_module

Gena Makhomed August 22, 2014 03:12PM

Re: error_page 404 и ngx_http_index_module

Maxim Dounin August 25, 2014 08:48AM

Re: error_page 404 и ngx_http_index_modul e

Gena Makhomed August 26, 2014 03:24PM

Re: allow/deny and return

Anton Yuzhaninov October 16, 2013 05:14AM

Re: allow/deny and return

Ruslan Ermilov October 16, 2013 01:26PM

Re: allow/deny and return

Maxim Dounin October 16, 2013 02:20PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 276
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready