Labutin
Новичок
Как в nginx все POST запросы направить на отдельный upstream?
Речь пойдет об nginx version: nginx/0.5.26
Задача состоит в том, чтобы все POST запросы отправить на отдельный upstream в nginx. Сначала поясню зачем это нужно.
Есть очень популярный ресурс. Наботает по схеме nginx + php_fastcgi
Т.е. на порту 8888 запущено 10 php_fastcgi процессов:
Можно увеличивать количество дочерних процессов - но тогда в обычное время большинство из них будут попусту простаивать и тратить память. Моя мечта, чтобы кол-во дочерних fastcgi процессов само динамических увеличивалось. Это запланировано в php-fpm, но, как я понимаю, пока не реализовано.
В общем идея, запустить еще пачку fasfcgi процессов на отдельном порту и все POST запросы выполнять через них.
Вот, что я пробовал (куски конфига):
Как же их туда завернуть?
Вроде все что хотел выложил.
Для тех, кто уже забыл nginx version: nginx/0.5.26
Речь пойдет об nginx version: nginx/0.5.26
Задача состоит в том, чтобы все POST запросы отправить на отдельный upstream в nginx. Сначала поясню зачем это нужно.
Есть очень популярный ресурс. Наботает по схеме nginx + php_fastcgi
Т.е. на порту 8888 запущено 10 php_fastcgi процессов:
В сайте есть два блока. Первый - это контентная часть (там исключительно GET-запросы). Второй блок - это обработка данных пользователей (данные приходят по POST-запросу). Вот вторая часть иногда начинает подтормаживать по независящим от сайта причинам (там идет взаимодействие со сторонним ресурсом). При подтормаживании второй части случается, что в один момент одновременно выполяется 10 запросов и nginx начинает выдавать страницу с сообщением, что сайт временно недоступен, а в логах пишет следующее:#!/usr/local/bin/bash
export PHP_FCGI_CHILDREN=10
/opt/php/bin/php-cgi -c /opt/php/bin/php.ini -b 127.0.0.1:8888
То, что ускорить выполнение POST запросов нельзя - это данность2008/04/29 13:40:16 [error] 926#0: *3578802 upstream timed out (60: Operation timed out) while connecting to upstream, client: 87.244.x.x, server: www.company.ru, URL: "/url/", upstream: "fastcgi://127.0.0.1:8888", host: "www.company.ru", referrer: "http://www.company2.ru/"

В общем идея, запустить еще пачку fasfcgi процессов на отдельном порту и все POST запросы выполнять через них.
Я пытался это настроить в nginx - но ничего не получается#!/usr/local/bin/bash
export PHP_FCGI_CHILDREN=10
/opt/php/bin/php-cgi -c /opt/php/bin/php.ini -b 127.0.0.1:8888
/opt/php/bin/php-cgi -c /opt/php/bin/php.ini -b 127.0.0.1:9999

Форма с POST имеет вид:http {
upstream backend {
server 127.0.0.1:8888;
}
upstream backendpost {
server 127.0.0.1:9999;
}
server {
location /sendpost/
{
internal;
root /home/www/htdocs;
fastcgi_pass backendpost;
.....
}
location / {
root /home/www/htdocs;
if ($request_method = "POST") {
rewrite ^/$ /sendpost/ last;
}
}
}
}
Но POST запросы все рано не идут в отдельный upstraem<form action="/" method="POST">...</form>

Вроде все что хотел выложил.
Для тех, кто уже забыл nginx version: nginx/0.5.26
