AWS Elastic Beanstalk не так отзывчив на Transfer-Encoding=chunked, как Heroku

На моем https://disqussearch.com/ развернутом как Jetty в Docker на AWS Elastic Beanstalk (дополнительные сведения об этом процессе см. На https://gmachine1729.com/2019/05/04/i-finally-used-docker-and-amazon-elastic-beanstalk/), когда я запросил https://disqussearch.com/search?username=infoproc&query=feynman&comment_download_limit=1000&match_all_terms=false (сделал это через пользовательский веб-интерфейс, который сделал запрос ajax) вместо потоковой передачи 7 результаты один за другим асинхронно (ответ является фрагментарным) с

response.setHeader("Content-Type", "text/html")
response.setHeader("Transfer-Encoding", "chunked")

в моем коде.

Но на Heroku, с конечной точкой на https://pacific-waters-11622.herokuapp.com/ (и вы можете сделать тот же запрос там с помощью https://pacific-waters-11622.herokuapp.com/search?username=infoproc&query=feynman&comment_download_limit=1000&match_all_terms=false) результаты будут отображаться асинхронно один за другим вместо сообщения о загрузке на некоторое время, а затем "Готово 7 результатов".

Я не очень знаком с заголовком Transfer-Encoding, поэтому сейчас я понятия не имею, что может быть причиной этого.

Мой код интерфейса ниже. Я использую "onprogress" для обновления того, что отображается на странице, которое должно срабатывать при поступлении другого чанка.

$('#search_submit').click(function(){
        var username = $('input[name=username]').val();
        var query = $('input[name=query]').val();
        var comment_download_limit = $('input[name=comment_download_limit]').val();
        var match_all_terms = $('input[name=match_all_terms]').is(':checked');

        $.ajax({
            xhr: function() {
                var xhr = $.ajaxSettings.xhr();
                xhr.onprogress = function(evt) {
                    $('#search_results').html(xhr.responseText);
                    $('#num_results').html(numResultsSoFar());
                    return false;
                }
                return xhr;
            },
            beforeSend: function(xhr) {
                $.each(pendingXhr, function(i, xhr) {
                    xhr.abort();
                });
                pendingXhr.push(xhr);
                $('#search_results').html('');
                $('#progress_info').html("Loading results... (<span id='num_results'></span> results)");
                $('#num_results').text(numResultsSoFar());
                $('.loader').show();
                $('#search_progress').show();
            },
            url: 'search',
            type: 'GET',
            data: { username: username, query: query, comment_download_limit: comment_download_limit, match_all_terms: match_all_terms },
            success: function(result) {
                $('#progress_info').html('Done! (' + numResultsSoFar() + ' results) &#10004;');
                $('.loader').hide();
            }
        })
        return false;
    });

Что я могу изменить или настроить в своем коде или в AWS EB для решения этой проблемы?

Я также имею в /etc/nginx/sites-enabled/elasticbeanstalk-nginx-docker-proxy.conf

map $http_upgrade $connection_upgrade {
    default        "upgrade";
    ""            "";
}

server {
    listen 80;

    gzip on;
        gzip_comp_level 4;
        gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
        set $year $1;
        set $month $2;
        set $day $3;
        set $hour $4;
    }
    access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;

    access_log    /var/log/nginx/access.log;
    if ($http_x_forwarded_proto != 'https') {
      rewrite ^(.*) https://$host$1 redirect;
    }
    location / {
      proxy_pass          http://docker;
      proxy_http_version  1.1;

      proxy_set_header    Connection          $connection_upgrade;
      proxy_set_header    Upgrade             $http_upgrade;
      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    X-Forwarded-Host    $host;
      proxy_set_header    X-Forwarded-Server  $host;
    }
}

Бьюсь об заклад, я мог бы решить это с соответствующим изменением в этом.

nginx version: nginx/1.14.1

0 ответов

Другие вопросы по тегам