ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: location error, root не видит другие файлы



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 mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.