@Esergion

Как Nginx не отдавать клиенту ответ от асинхронного POST echo_subrequest_async?

Здравствуйте, имеется приложение в котором надо бы собрать статистику при обращении к
location /open и location /load

На данный момент сделано следующее:
upstream app_server{
        server 127.0.0.1:7101; # основное приложение
    }
upstream stat_app_server{
	server 127.0.0.1:9292; # для сбора статистики
    }
server {
        listen 80 default_server;
        location / {
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host $http_host;
         ..........
          if (!-f $request_filename) {
            proxy_pass http://app_server;
            break;
          }
        }
        # Rails error pages
        error_page 500 502 503 504 /500.html;
        location = /500.html {
          root .....-major/current/public;
        }
location /open {
	    echo_subrequest_async POST '/openstat' -q 'uri=$request_uri&refer=$http_referer&ip=$remote_addr';
	    proxy_pass http://app_server/open;
	}
location /load {
	    echo_subrequest_async POST '/loadstat' -q 'uri=$request_uri&refer=$http_referer&ip=$remote_addr';
	    proxy_pass http://app_server/load;
	}
	location /openstat {
	    proxy_pass http://stat_app_server/openstat;
	}
	location /loadstat {
	    proxy_pass http://stat_app_server/loadstat;
	}
}


В итоге при запросе
http://app_url/open
отдается пустая страница от
proxy_pass http://stat_app_server/openstat;
но не от
proxy_pass http://app_server/open;

Помогите заставить nginx не отдавать результат асинхронного запроса. Или возможен другой вариант конфига?
  • Вопрос задан
  • 2700 просмотров
Решения вопроса 1
@Esergion Автор вопроса
На всякий случай отпишусь о решении.
использовали модуль lua, с примерно такими запросами в необходимых location:
access_by_lua 'res = ngx.location.capture("/loadstat",
  { args = { uri = ngx.var.request_uri, refer = ngx.var.http_referer, ip = ngx.var.remote_addr }})';
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы