Задать вопрос
@Jane2506

Как сделать балансировку запросов с одного IP адреса, что бы запросы не застывал при долгом обработке?

Не могу сделать балансировку если запрос приходить в одного IP-адреса. Проблема такая: заходить первый запрос, но отработка этого запроса занимает 30 секунд, из-за API. nginx не должен закрыть этот запрос, он должен ждать пока сервер не ответить. в это время заходить еще по очереди 10 запросов с того же IP-адреса, но их обработка не занимает больше 0,5 секунды. но из-за того что там один запрос все еще обрабатывается, остальные 10 запросов ждет этого.

Я подняла nginx с двумя серверами. Хочу сделать так, если первый сервер все еще обрабатывает запрос, остальные запросы были всегда направлены на второй. Когда первый сервер закончить обработку и вернет ответ, этот сервер станет доступным и можно будет туда отправлять запросы. Вроде сделала, когда с двух IP-адрес приходить запросы, тогда вроде все срабатывает. Но когда с одного IP-адреса приходить, тогда все запросы застывает, пока не обработает запрос с задержкой. Прошу помочь!

Это конфиг с nginx:

events {
    worker_connections 1024;
}
http {    
    client_max_body_size 100M;
    client_body_buffer_size 100M;
    # limit_conn_zone $binary_remote_addr zone=halyk_bank_identification:10m;

    include       mime.types;
    default_type  application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" '
		              ' $request_length $upstream_addr $upstream_response_time';

    access_log /etc/nginx/access.log main;
    error_log /etc/nginx/error.log debug;

    upstream rasa {
        least_conn;
        
        server rasa_actions-1:5017 max_fails=1 fail_timeout=10s;
        server rasa_actions-2:5017 max_fails=1 fail_timeout=10s;
    }

    server {
        listen 80;
        server_name localhost;

        access_log /etc/nginx/access.log main;

        location /webhook {

            proxy_connect_timeout 3s;
            proxy_read_timeout 10s;

            proxy_pass http://rasa;
            
            proxy_set_header Content-Type application/json;

            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Content-Length $content_length;
            proxy_set_header X-Server-Name $host;

            proxy_pass_request_body on;
            access_log /etc/nginx/webhook_access.log main;
        }

        location / {
            return 404;
        }
    }
}
  • Вопрос задан
  • 84 просмотра
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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