rewrite É ×ÙÂÏÒ location ÐÒÉ x-accel-redirect

lr at notes.spb.ru lr at notes.spb.ru
Tue Feb 12 02:04:29 MSK 2008


доброго времени суток, господа!

1. конфигурация:

 server {
        listen       80;
        server_name  localhost h_client.ru www.h_client.ru;
        root   /usr/local/www/h_client/htdocs;


        location  /hiddenfiles {
                root            /usr/local/www/h_client/;
                access_log /var/log/nginx/hidden_access.log  main;
                error_log /var/log/nginx/hidden_error.log debug;
                internal;
        }


        if (!-e $request_filename) {
            rewrite ^/(udata|upage|uobject|ufs|usel):(\/\/)?(.*)?
/releaseStreams.php?scheme=$1&path=$3   break;
            rewrite ^/robots\.txt       /sbots.php      break;
            rewrite  ^/.*       /index.php?path=$fastcgi_script_name
break;
        }

        location / {
            root   /usr/local/www/h_client/htdocs;
           index  index.php;
        }

        location ~* ^.+\.(php)$ {

            root /usr/local/www/h_client/htdocs;
            fastcgi_pass 127.0.0.1:8888;
            fastcgi_index index.php;
      ( и так далее про fastcgi ).

2. есть скрипт x.php, выдающий X-Accel-Redirect на /hiddenfiles/1.htm
3. редирект выдается. но вопреки ожиданию, дальше этот редирект ловится
rewrite, и переписывается в
/index.php?path=$fastcgi_script_name  break;

вопрос -- почему мы не оказываемся в location /hiddenfiles?
я пробовал убирать rewrite, и все работает как надо. но у клиента там
umi.cms, ему эти рерайты нужны...
перенос rewrite в location'ы вызывает отвал работоспособности собственно
cms. тоже непонятно, почему.

лог показывает, что мы честно делаем все эти rewrite.

2008/02/12 01:51:08 [notice] 9780#0: *8103
"^/(udata|upage|uobject|ufs|usel):(\/\/)?(.*)?" does not match
"/hiddenfiles/1.xxx", client: 81.3.170.19, server: localhost, URL:
"/x.php", upstream: "fastcgi://127.0.0.1:8888", host: "www.h_client.ru"
2008/02/12 01:51:08 [notice] 9780#0: *8103 "^/robots\.txt" does not match
"/hiddenfiles/1.xxx", client: 81.3.170.19, server: localhost, URL:
"/x.php", upstream: "fastcgi://127.0.0.1:8888", host: "www.h_client.ru"
2008/02/12 01:51:08 [notice] 9780#0: *8103 "^/.*" matches
"/hiddenfiles/1.xxx", client: 81.3.170.19, server: localhost, URL:
"/x.php", upstream: "fastcgi://127.0.0.1:8888", host: "www.h_client.ru"
2008/02/12 01:51:08 [notice] 9780#0: *8103 rewritten data: "/index.php",
args: "path=/hiddenfiles/1.xxx", client: 81.3.170.19, server: localhost,
URL: "/x.php", upstream: "fastcgi://127.0.0.1:8888", host:
"www.h_client.ru"

я нашел некое решение, поставив перед вышеприведенным if такое:

        if ( $request_filename ~ \/hiddenfiles\/ ) {
                break;
        }

но это мне кажется неправильным -- мы каждый запрос будем проверять по
regexp, трата процессора.

посоветуйте, пожалйста, что-нибудь экономное для ресурсов сервера.

                  С уважением.
                        Leonid Ryzhik






More information about the nginx-ru mailing list