Проблема с SSI-подзапросами

Igor Sysoev is at rambler-co.ru
Mon Jun 15 15:55:01 MSD 2009


On Mon, Jun 15, 2009 at 03:36:44PM +0400, Матвеев Андрей wrote:

> Приветствую,
> 
> 
> Статика в данном примере отдается нормально из /opt/www/somesite-1/data, 
> а когда запрашиваем /test.html содержащий <!--#include virtual="top.html" --> подзапрос к top.html имеет неверный root, переменные $a и $b не передались.
> 
> Если переменные задать явно, подзапрос отрабатывает:
> set $a  somesite-;
> set $b  1;
> 
> Так и должно быть? Или что-то неверно в конфиге?
> 
> nginx version: nginx/0.7.59
> 
> ошибка подзапроса из error_log:
> 2009/06/15 15:05:50 [error] 4378#0: *1 open() "/opt/www-data//data/top.html" failed (2: No such file or directory), client: xx.xx.xx.xx, server: ~^(somesite-)([1-9])\.some\.ru$, request: "GET /test.html HTTP/1.1", subrequest: "/top.html", host: "somesite-1.some.ru"
> 
> 
>     server {
>         listen          80 default backlog=1024 deferred;
>         server_name     ~^(somesite-)([1-9])\.some\.ru$;
> 
>         set $a  $1;
>         set $b  $2;
> 
>         location ~ (test.html|top.html) {
>                ssi on;
>                root /opt/www-data/$a$b/data;
>         }
> 
>         location / {
>                 root /opt/www-data/$a$b/data;
>         }
>     }

Проблема в том, что подзапрос начинает работу с rewrite/set серверного уровня
и $1/$2 теряются.

Вот так работать будет, но конструкция хрупкая - любой rewrite или
location с регексом всё сломает:

     server {
         listen          80 default backlog=1024 deferred;
         server_name     ~^(somesite-)([1-9])\.some\.ru$;
 
         location = /test.html {
                ssi on;
                root /opt/www-data/$1$2/data;
         }

         location = /top.html {
                ssi on;
                root /opt/www-data/$1$2/data;
         }
 
         location / {
                root /opt/www-data/$1$2/data;
         }
     }


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





More information about the nginx-ru mailing list