Re: location error, root не видит другие файлы
Maxim Dounin
mdounin at mdounin.ru
Mon Oct 29 12:33:04 UTC 2012
Hello!
On Mon, Oct 29, 2012 at 08:05:15AM -0400, fura wrote:
> Всем привет.
>
> Есть страничка, которая должна показываться при ошибки, в ней есть
> картинки(img src=), css и т.д.
> Вот пример конфига:
>
> server_name mysite;
>
> error_page 404 502 /notwork.html;
>
> location /notwork.html {
> root /var/www/notwork;
> }
>
> location / {
> proxy_pass http://other_server:8080;
> }
>
>
> В файле notwork.html есть текст вида:
> <img ... src="mypics.png" ...>
> эта картинка (mypics.png) находится в директории /var/www/notwork, но не
> отображается.
Картинка не отображается, т.к. сама страница ошибки показывается
по произвольному адресу, и попытавшись разрешить относительный
путь от этого произвольного адреса - браузер гарантированно
получит неправильный результат.
> Если же сделать :
>
> error_page 404 502 /notwork;
>
> location /notwork {
> root /var/www;
> index notwork.html;
> }
>
> то тогда все картинки и файлы отображаются, но когда сайт начинает работать,
> не уходит с этого урла на location / .
А так у вас в результате попытки возврата каталога будет
перенаправление с кодом 301 на /notwork/. Пути в рамках страницы
ошибки при этом будут правильные, но исходный адрес страницы, где
был пользователь, теряется.
(Кроме того, для того, чтобы добиться того же эффекта не нужны все
эти сложности с индексным файлом и автоматическим
перенаправлением, можно сразу адрес для перенаправления в
error_page написать, но в любом случае редко когда нужно подобное
поведение при обработке ошибок.)
> Как решить данную проблему?
Правильно делать так:
Определяем обработку ошибок:
error_page 404 502 /errors/error.html;
Определяем обработку для страницы с ошибкой и файлов в ней:
location /errors/ {
root /var/www;
}
Поскольку страница с ошибкой может показываться по совершенно
разным с точки зрения браузера адресам, использование в ней
относительных адресов для вставки картинок - недопустимо.
Используем вместо этого полный путь от корня сайта:
<img src="/errors/mypics.png">
Как-то так всё должно работать.
--
Maxim Dounin
http://nginx.com/support.html
Подробная информация о списке рассылки nginx-ru