ПРОЕКТЫ 


  АРХИВ 


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: Ещё раз про обрабо тку 404-й ошибки, но без FastCGI



>Здравствуйте.
>
>Возникла такая проблема. Нужно каким-то образом отдавать файлы через
>обработчик 404-й ошибки в php.
>С голимым apache всё нормально, nginx разумеется говорит, что файл Not Found
>и это правильно, потому что такого файла нет.
>Хотелось бы довольно простую вещь сделать - если на определённом Location
>nginx не нашёл файл, то чтобы он просто этот запрос, который вернул ошибку
>передал apache. Помоему это должно решить проблему или нет?
>
>Пробовал делать разные конструкции вида error_page 404, но так и ничего не
>добился - либо Not Found, либо запрос уходит apache, но не как для обработки
>404-й ошибки.
>
>Буду также рад любым советам как решить эту проблему. Работает связка
>nginx+apache+php. Без FastCGI. Не знаю важно это или нет, но PHP вызывается
>как просто CGI без mod_php.

"обработчик 404-й ошибки в php" - если честно непонятно что именно Вы хотите 
получить.

Вариант 1, через 404 ошибку, допустим имеется основная директория откуда нужно 
отдавать статику, если не нашлось файла - проксировать на backend, при 
обращении к PHP скриптам - сразу проксировать, запросы с POST параметрами тоже 
должны проксироваться (очевидно что это динамика):

location ~* \.php$ {
        proxy_pass http://127.0.0.1:1234;
}

recursive_error_pages on;
location / {
        if ($request_method = POST ) {
                proxy_pass http://127.0.0.1:1234;
                break;
        }
        root /usr/home/foo/bar/root;
        error_page 404 = /backend$uri;
}

location /backend {
        internal;
        proxy_pass http://127.0.0.1:1234;
        recursive_error_pages off;
}

Вариант 2, через конструкцию if:
location / {
        if (!-e $request_filename) { proxy_pass http://127.0.0.1:1234; }
}

-- 
 _____________________________________
| Best regards, Roman R.Musin.
| GooDoo.*
| eMail.work: xdevis@xxxxxxxxx
| ICQ.work: 227-270-674
| Tel.mobile: 8 (926) 528-0898




 




Copyright © Lexa Software, 1996-2009.