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/;
}
Но она довольно ограниченная, хотелось бы узнать как следует делать
правильно (в случае использования бекендов типа апаче)
|