NGINX, PHP-FPM и загрузка файлов по HTTP

Наверно недели 3 сидел у меня в голове вопрос на тему NGINX + PHP-FPM (FastCGI) и как они будут работать с загрузкой файла по HTTP, если PHP-FPM процесс крутиться на другом сервере.

Сегодня наконец выпала возможность в конце рабочего дня собрать на 2 раздельных серверах такую конфигурацию, когда NGINX находиться на одном сервере, а процессы PHP-FPM на другом и NGINX весь .php прогоняет именно через те процессы, что крутятся удалённо.

Весь этот эксперимент проходил на Ubuntu Server 8.10, так что проблем с установкой или сборкой PHP или NGINX у меня не возникло. Единственное, что я сделал не верно и что меня затормозило на пол часа, так это конфигурация NGINX — я упустил строку, в которой PHP файлы указывалось искать не в Document Root, а в /scripts.

Собрать из HTML форму для загрузки файла не составляет труда, добросить за несколько минут туда PHP код, который сделает var_dump($_FILES); и отдаст содержимое загружаемого файла тоже не сложно.

Прицепить маленький текстовый файл и нажать на «Submit» ещё проще. И что же видно в результате? Всё работает идеально. Файл загружен при помощи POST на сервер с NGINX, а там передан к PHP-FPM и уже PHP-обработчик с ним работает как ему/вам угодно — что меня очень радует. Всё работает «out of the box» и никаких особых шаманских танцев не нужно.

Что огорчает, так что PHP-FPM до сих пор не входит ни в стандартную поставку PHP ни в какие-либо пакеты в стандартных дистрибутивах Linux — таскать за собой какие-либо Perl или Lighttpd spawn-скрипты не хочется, плюс те возможности, которые представляет PHP-FPM делает его очень вкусным.

Ещё огорчает, что PHP-FPM это patch к PHP и после его установки установить какой-либо модуль из PECL становиться намного сложнее если вы его хотите скомпилировать со static – приходиться использовать phpize.

Но вообще, эксперимент считаю удавшимся — сборка системы с NGINX + PHP-FPM не представляет сложности и я давно хотел испытать такую конфигурацию хотя-бы в парниковых условиях.

2 thoughts on “NGINX, PHP-FPM и загрузка файлов по HTTP

  1. Сергей, Вы пробовали загружать файлы размером порядка нескольких сотен килобайт?
    У меня просто возникла проблема: есть связка Nginx + Пускач для FastCGI + FastCGI (на перле). Так вот небольшие файлы (примерное до 5 килобайт) загружаются без проблем, но при загрузке файла, например, в 100 килобайт сыпется ошибка “502 Bad Gateway”. Если посмотреть диалог обмена FastCGI-записями между веб-сервером и приложением получается, что сервер открывает запрос, передает переменные окружения, после чего неожиданно закрывает соединение, то есть файл не передает. На маленьких файлах все работает замечательно, после параметров передается сам файл.
    Загружаются ли у вас большие файлы, если да, укажите версию Nginx?
    Спасибо.

  2. Не вспомню я уже… Давно было.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.