nginx не пересылает POST в @fallback - PullRequest
3 голосов
/ 05 января 2010

Я написал высокопроизводительный сервер событий HTTP на C ++ и хочу, чтобы он работал без проблем с nginx и PHP-FPM (fastcgi). Это фрагмент моей конфигурации nginx.

    location ~ \.eve$ {
        gzip off;
        proxy_redirect off;
        proxy_buffering off;
        proxy_pass http://127.0.0.1:9001;
        proxy_intercept_errors on;
        error_page 505 = @fallback // this is actually BACKEND.php
    }

Мой сервер событий возвращает 505 ошибок, если есть событие, в противном случае оно зависает, и в конечном итоге возвращает директиву «НЕТ ИЗМЕНЕНИЯ СОСТОЯНИЯ», которую я обрабатываю с помощью JS или чего-то другого (это в основном комета). Дело в том, что я хотел бы, чтобы nginx перехватил ошибку 505 и направил этот запрос в PHP, чтобы PHP мог соответствующим образом обработать событие. Мой сервер в основном просто концентратор событий, позволяющий многим многим пользователям иметь возможность подключаться и видеть, есть ли какие-либо новые события. Если есть событие, PHP обрабатывает распространение события, включая разрешения и другие нестабильные вещи.

Проблема в том, что nginx не передает переменные POST (или GET), которые были переданы * .eve, в BACKEND.php. Теперь я предполагаю, что это сделано специально (из-за директивы error_page), но я решил, что должен быть какой-то способ заставить его работать. Мой сервер работает на 9001, PHP-FPM работает на 9000. Есть идеи?

Ответы [ 2 ]

1 голос
/ 06 января 2010

Я исправил проблему, просто перестроив самую последнюю версию nginx. Конфиг, а также перенаправление POST и GET работает отлично. Weirdness.

0 голосов
/ 05 января 2010

Ваш сервер может вернуть ответ с заголовком X-Accel-Redirect, указывающим URL-адрес внутреннего интерфейса. В этом случае nginx сделает запрос к URL и вернет ответ пользователю. Нет 30 [12] перенаправляет, как если бы пользователь запросил URL в первую очередь.

http://kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/
Google для других примеров.

Это специфично для nginx, но идея представлена ​​в lighttpd с заголовком X-Sendfile.

Я бы не рассчитывал на параметры запроса POST, передаваемые сюда. Зеркально отразить параметры POST в GET и X-Accel-Redirect, если ваш бэкэнд может принять это. error_page действительно не пройдет.

...