Re: Ещё раз про обработку 404-й ошибки, но без FastCGI

Roman R.Musin xdevis at yandex.ru
Wed Jul 4 12:18:59 MSD 2007


>Здравствуйте.
>
>Возникла такая проблема. Нужно каким-то образом отдавать файлы через
>обработчик 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 at yandex.ru
| ICQ.work: 227-270-674
| Tel.mobile: 8 (926) 528-0898






More information about the nginx-ru mailing list