Проксирование php с помощью nginx

Labutin

Новичок
Проксирование php с помощью nginx

Исходные данные:
На сервере реализован ЧПУ через 404-ю ошибку:
ErrorDocument 404 /index.php
т.е. все запросы /dir1/dir2/
обрабатываются/генерятся PHP-скриптом.
При большом наплыве народа PHP-скрипты съедают ВСЕ ресурсы процессора :(

Задача:
Разгрузить сервер.

Решение:
Хочу поставить nginx. Везде пишут, что nginx в основном помогает при проксировании статики.
Хочу его настроить как front-end перед апачем.
Скажите, а как nginx определяет по адресу http://www.site.ru/dir1/ apche отдал статический index.html или результат работы скрипта? Как его заставить проксировать (закешировать) результат сгенеренный скриптом, чтобы потом, скажем, в течение 30 секунд последеющие запросы на http://www.site.ru/dir1/ отдавать из своего кеша, а не спрашивать у апача?

Еще пишут, что можно через FastCGI попробовать. Это сильно мне поможет?
 

ys

отодвинутый новичок
>На сервере реализован ЧПУ через 404-ю ошибку:

Я чуть рюмкой чая не подавился. :)
 

Labutin

Новичок
Wicked
Читал...
Огорчила фраза типа "эксперементируйте, а документация когда-нибудь появится" :(
 

MiksIr

miksir@home:~$
Nginx разделяет статику и проксирование на основе своих конфигов. Далее, скрипт может выдать в ответ специальный заголовок-редирект с адресом файла и nginx отдаст этот файл сам. Для прозрачной работы апача и nginx-а, что бы апач говорил nginx-у что есть статика,а что нет, есть mod_aclr. Но самый правильный вариант все же конфиг nginx-а.
Далее, nginx пока не умеет ничего кешировать - класть что-то в кеш должны скрипты, nginx же настраиватся на принцип - проверить, есть ли что-то в кеше, если нет - отдать в скрипт.
Далее, если весь сайт - это статика да php - действительно можно попробовать fastcgi - апач тут особо не нужен, выигрыш будет, но то, что бы очень сильно... вряд ли.
nginx же поможет в любом случае, разгрузив интерпретатор от ожидания отдачи ответа медленному клиенту.
 

Krishna

Продался Java
Скажите, а как nginx определяет по адресу http://www.site.ru/dir1/ apche отдал статический index.html или результат работы скрипта?
Точно так же, как и браузер - по заголовкам. Стандартный вывод php скрипта сопровождается заголовками, запрещающими кеширование. Если нужно его разрешить - стоит в скрипте использовать header();
Как его заставить проксировать (закешировать) результат сгенеренный скриптом, чтобы потом, скажем, в течение 30 секунд последеющие запросы на http://www.site.ru/dir1/ отдавать из своего кеша, а не спрашивать у апача?
Основное назначение nginx не прокси, а облегченный http сервер. Насколько мне известно, кешированием он не занимается вообще, он лишь обрабатывает часть запросов сам, а часть передаёт (при соотвествующей настройке nginxа, как фронт-енд front-end) бэк-енду (back-end) - Апачу. Для статики, навроде маленьких картинок, бонусы в том, что nginx значительно быстрее обрабатывает простые запросы, чем тяжелый апач. Для динамики (скрипты) бонуса как минимум 2 - количество одновременно висящих процессов апача снижается, за счет того, что nginx несколько запросов от разных ip может передавать одному процессу, что ведет прежде всего к сокращению общего количества оперативной памяти, выделяемой апачу (в лице mod_php), а так же, система тратит меньше ресурсов на относительно дорогостоящий запуск процессов апача.

Если есть желание сэкономить именно на запуске скрипта, отдавая именно кэш в виде html, то смотреть надо в сторону например squid. И надо учитывать, что скрипт должен быть приспособлен к такому кешированию. (Как минимум правильно определять заголовки + уметь понимать, когда кэш надо обновить.)
Еще пишут, что можно через FastCGI попробовать. Это сильно мне поможет?
Всё зависит от специфики задачи. Универсальных решений нет. Нужно экспериментировать.
 
Сверху