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

Виктор Вислобоков corochoone at gmail.com
Wed Jul 4 15:42:30 MSD 2007


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


Объясняю. Есть у меня например CMS. В этой CMS есть каталог /downloads. На
странице размещены ссылки:
http://www.site.ru/downloads/stuff.zip. Но самого файла stuff.zip в каталоге
/downloads нет. При клике на ссылку срабатывает редирект по 404-й ошибке на
скрипт downloads.php который берёт файлы из специального места и подставляет
их на скачивание.

Когда apache работает один - всё нормально. Когда я ставлю перед ним nginx,
то nginx сам пытается отдать stuff.zip, но его там нет. После чего nginx
честно выдаёт страничку Not found.

Да, конечно, я могу создать специальный location где nginx не будет
задействован, но меня так не устраивает. Ладно когда сайт мой, а если
клиенты свои каталоги для скачки создадут по подобному же способу через
404-ю ошибку? Поэтому я и хочу, чтобы если nginx не находит файл, он просто
этот же запрос отдавал бы apache не пытаясь ничего никуда перенаправлять.

То что вы предложили ведёт себя очень странно:
по proxy_pass http://127.0.0.1:80; у меня открывается мой сайт на ЛОКАЛЬНОМ
ХОСТЕ :)
Прикольно, конечно, но несколько не то, что я бы хотел.

Вариант 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
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20070704/01570acd/attachment.html>


More information about the nginx-ru mailing list