<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=KOI8-R" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Игорь, спасибо!<br>
<br>
Правильно ли я понимаю, в таком случае можно ограничиться allow
127.0.0.1 deny all, без internal, если не нужно скрывать от посетителя
сам факт существования /block?<br>
<br>
И еще, пользуясь случаем -- по поводу 304 not modified и
x-accel-redirect -- в итоге не существует способа отключить проверку
файла по if-modified-since?<br>
<br>
Igor Sysoev wrote:
<blockquote cite="mid:20090209120059.GD12926@rambler-co.ru" type="cite">
<pre wrap="">On Mon, Feb 09, 2009 at 02:51:51PM +0300, Роман Маширов wrote:
</pre>
<blockquote type="cite">
<pre wrap="">Добрый день!
Есть location, из которого отдаются закешированные файлы в ssi. Если
файла нет, запрашиваем бэк:
location /block {
root /.../cache_back;
error_page 404 = @fallback;
log_not_found off;
}
Далее, блоки показывать пришедшим снаружи не хочу, поэтому добавляю
internal. В результате все запросы снаружи на /block ломятся на бэк.
Поведение соответствует документации, но не здравому смыслу...
location /block {
root /.../cache_back;
error_page 404 = @fallback;
internal;
log_not_found off;
}
Если запретить доступ для всех, кроме самого фронта:
location /block {
root /.../cache_back;
error_page 404 = @fallback;
internal;
allow 127.0.0.1;
deny all;
log_not_found off;
}
Получаю еще более странную штуку -- запросы все равно ломятся на бэк. По
всей видимости internal имеет более высокий приоритет чем allow/deny? Я
что-то упустил, или internal в таком случае неприменим? Может логичнее
было бы отдавать 403 на internal а не 404?
</pre>
</blockquote>
<pre wrap=""><!---->
internal отрабатывает раньше allow/deny.
403 говорит, что на сервере такой location существует, а 404 полностью
скрывает от клиента существование location'а.
Решить проблему можно с помощью try_files:
location /block {
internal;
try_files $uri @fallback;
}
</pre>
</blockquote>
<br>
</body>
</html>