location, backend, rewrites
pavel at pronskiy.ru
pavel at pronskiy.ru
Fri Aug 15 15:50:48 MSD 2008
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/;
> }
>
> Но она довольно ограниченная, хотелось бы узнать как следует делать
> правильно (в случае использования бекендов типа апаче)
>
More information about the nginx-ru
mailing list