location + error_page + url prefixes

Igor Sysoev is at rambler-co.ru
Sat Jan 31 12:46:14 MSK 2009


On Sat, Jan 31, 2009 at 01:36:27AM +0200, Maxim Yemelyanov wrote:

> теперь при запросе несуществующего url с любым языком выдается
> содержимое /500.html, причем если этот файл удалить, то выскакивает
> сообщение
> Status: 500 Internal Server Error Content-Type: text/html
> Application error (Rails)
> 
> в пределах server-а никаких ссылок на 500.html нет

А на уровне http ?

>        location /ru/ {
>            error_page   500 502 503 504  /500_ru.html;
>            error_page   404           =  @mongrel_ru;
>        }
>        location @mongrel_ru {
>           proxy_pass http://mongrel;
>           proxy_intercept_errors   on;
>           recursive_error_pages   on;
>           error_page   404         /404_ru.html;

+           error_page   500 502 503 504  /500_ru.html;

>       }
> 
> вот секция location / :
> 
>     location / {
>       if (-f $request_filename) {
>         break;
>       }
>       if (-f $request_filename/index.html) {
>         rewrite (.*) $1/index.html break;
>       }
>       if (-f $request_filename.html) {
>         rewrite (.*) $1.html break;
>       }
>       if (!-f $request_filename) {
>         proxy_pass http://mongrel;
>         access_log  /home/abp/log/nginx.offside-mongrel.access.log
> main buffer=100;
>         break;
>       }
>     }

В вот с этим кошмаром следует поступить так: поставить 0.7.32 или
0.6.35 с патчем http://sysoev.ru/nginx/patch.try_files.0.6.35
и использовать современные нанотехнологии - try_files:
http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#try_files

    location / {
        try_files   $uri  $uri/index.html  $uri.html  @mongrel;
    }

    location @mogrel {
        proxy_pass     http://mongrel;
    }

Скорее всего, это придётся сделать с /ru/, /en/ и просто /:

    location /ru/ {
        try_files   $uri  $uri/index.html  $uri.html  @mongrel_ru;

        error_page   500 502 503 504  /500_ru.html;
    }

    location @mongrel_ru {
       proxy_pass http://mongrel;

       proxy_intercept_errors   on;
       recursive_error_pages   on;

       error_page   500 502 503 504  /500_ru.html;
       error_page   404              /404_ru.html;
    }


    location /en/ {
        try_files   $uri  $uri/index.html  $uri.html  @mongrel_en;

        error_page   500 502 503 504  /500_en.html;
    }

    location @mongrel_en {
       proxy_pass http://mongrel;

       proxy_intercept_errors   on;
       recursive_error_pages   on;

       error_page   500 502 503 504  /500_en.html;
       error_page   404              /404_en.html;
    }


    location / {
        try_files   $uri  $uri/index.html  $uri.html  @mongrel;

        error_page   500 502 503 504  /500.html;
    }

    location @mongrel {
       proxy_pass http://mongrel;

       proxy_intercept_errors   on;
       recursive_error_pages   on;

       error_page   500 502 503 504  /500.html;
       error_page   404              /404.html;
    }


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list