Как закрыть TCP-соединение, когда недопустимый пользователь пытается опубликовать большой файл?

#c #nginx #fastcgi

#c #nginx #fastcgi

Вопрос:

Я написал простую программу на C , отвечающую на HTTP, используя http://www.fastcgi.com библиотека веб-сервер nginx. Это работает почти великолепно. Но я заметил, что функция fcgi

 int FCGX_Accept_r(FCGX_Request *request);
  

не возвращается до того, как весь запрос будет передан на сервер. Проблема: я не могу проанализировать параметры из URI до завершения передачи файла: я хочу проанализировать аргумент «?sid =», чтобы отклонить передачу от недопустимого пользователя. Было бы пустой тратой пропускной способности, разрешать кому-либо отправлять файлы объемом 1 ГБ на сервер.

Насколько я знаю, веб-сервер всегда отправляет FCGI_BEGIN_REQUEST через соединение FastCGI при запуске нового запроса, затем FCGI_PARAMS и т.д. Поэтому было бы неплохо отреагировать на содержимое некоторых параметров до того, как пользователь передаст все (возможно, ненужные и слишком большие) данные.

Также я прочитаю больше документации nginx о его возможностях FastCGI.

обновление: Попытка отправить файл размером 2 ГБ в nginx через HTML-форму прослушивание обмена между nginx и fastcgi: nginx даже не пытается отправить байт в приложение FastCGI до того, как поступят все 2 ГБ. Итак, такое поведение вроде как нормально. И если вам нужна функциональность, о которой я прошу, оказывается, вам следует разработать свой собственный модуль nginx или простой веб-сервер. Hm…

Ответ №1:

Я думаю, вы можете управлять этим :

 location /xxx/upload {
    access_by_lua '
        //check cookie or something can recognize the req is valid or not
    ';
    fcgi_pass XXXX;
}
  

проверьте эту ссылку:
http://openresty.org /