ПРОЕКТЫ 


  АРХИВ 


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, backend, rewrites



Sergej Kandyla пишет:
Подскажите пожалуйста где я ошибаюсь.
Есть сайт с DLE, бекенд апач. Хочу реализовать правильную схему проксирования на бекенд исключительно php и динамики.

       location /index.php {
               rewrite / @backend ;
       }
server {
   proxy_set_header            Host                    $host;
   proxy_set_header            X-Real-IP       $remote_addr;
   proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
   set $root /dir/dir/www;

location / {
   index index.php;
#error_page 404 = @backend; # в случае если надо 404 статус перенаправлять на @backend (на мой взгляд такой способ не особо корректен (но работает), так как error_log придётся отключать ибо веб сервер будет флудить 404 статусом в логе на каждый файл)
   proxy_pass                  http://127.0.0.1:8000/;
}



       location ~ \.php$ {
               rewrite / @backend ;
       }
# если php как fastcgi.sock (php-fpm) без апача:
location \.php$ {
   fastcgi_pass unix:/var/run/domain.sock;
}


# если нужно ловить .php и передавать дальше апачу (так делать не рекомендуется, проще использовать location / {proxy_pass...})
location \.php$ {
   proxy_pass                  http://127.0.0.1:8000;
}


# статика
location ~* ^.+\.(swf|gif|jpg|jpeg|png|ico|js|css|xsl|txt|doc|rtf|pdf|rar|zip|gz|tgz|xls)$ {

   # если файла в root нет, происходит перенаправление.
   if (!-f $request_filename) {
       proxy_pass http://127.0.0.1:8000;
   }

   root $root;
   expires max;
}

root $root;

}


Любые запросы к статике будут обработаны фронтендом, а остальные запросы которые не фигурируют в location статики - проксируются на бекенд. Со-но если даже в запросах присутствуют ЧПУшные урлы, то они тоже перенаправляются на бакенд.

Проверить работоспособность можно протестировав запросы к статике и динамике, в логах всё фиксируется и статика и динамика, так что отследить кто чем занимается очень просто. Результатом изменений настроек должно быть следующее: в логах апача присутствовуют только запросы к динамическим страницам: 67.195.37.188 - - [15/Aug/2008:15:15:01 +0400] "GET /portfolio/print/p-1/ HTTP/1.0" 200 15040 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" 67.195.37.188 - - [15/Aug/2008:15:27:31 +0400] "GET /portfolio/ HTTP/1.0" 200 21264 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" 74.6.18.216 - - [15/Aug/2008:15:32:32 +0400] "GET /portfolio/clients/trancemaster/ HTTP/1.0" 200 13907 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)"

А на фронтенде полный лог всех запросов.


P.S Поправьте если где ошибся.


       location / {
                root /home/vhosts/domain/public_html;
               error_page 404 = @backend;
               index index.php;
       }

       location @backend {
                   proxy_set_header Host $host;
                   proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                   proxy_pass http://IP;
       }

Но на запрос к сайту, браузер предлагает мне сохранить php страницу. Тобиш запрос бекенду не передается.
Пробовал конструкцию
   if (!-e $request_filename) {proxy_pass http://IP;}

но результат такой же. Также пробовал менять порядок задания локейшенов.

PS. раньше была такая схема:

       location / {
               proxy_pass              http://IP;
               .....
       }

location ~* ^.+.(nrg|htm|htf|chm|sisx|sis|flv|thm|bin|...<skip>..)$ {
          root /home/_username_/domains/_default_/public_html/;
       }

Но она довольно ограниченная, хотелось бы узнать как следует делать правильно (в случае использования бекендов типа апаче)





 




Copyright © Lexa Software, 1996-2009.