Ошибка углового ответа 5 в Nginx - PullRequest
0 голосов
/ 03 мая 2018

Я запускаю угловое приложение внутри контейнера докера , в котором nginx работает как прокси-сервер для обслуживания скомпилированных угловых файлов.

HTTP-запросы, которые делает это угловое приложение, относятся к бэкэнд-приложению, работающему в другом док-контейнере, через nginx в этом контейнере.

Я сталкиваюсь с некоторыми странными проблемами, которых я не видел во время разработки, что привело меня к мысли, что это проблемы конфигурации nginx.

Контекст проблемы:

  • Угловое приложение выполняет HTTP-вызов Get для бэкэнда, который возвращает массив больших объектов JSON. Пример: [{json_obj1}, {json_obj2}, ...]

  • Иногда я получаю две разные ошибки при попытке получить эти объекты. Эти ошибки возникают периодически и чередуются между ними без видимой причины.

    • Ошибка 1: Failed to load resource: net::ERR_CONTENT_LENGTH_MISMATCH на угловом клиенте
    • Ошибка 2: \api\objects\ [200] error: failed to load objects (это пользовательское сообщение об ошибке, которое выдается при получении неверного ответа). Самым странным является то, что сервер возвращает ответ 200, как указано в состоянии сети. Но наблюдаемое все равно выдает ошибку. Итак, nginx успешно получает ответ, но когда пользовательский интерфейс пытается его использовать, он выдает ошибку.

Пример этой ошибки: Error2 error img - Когда число объектов , возвращаемых в этом списке, равно small , проблема не возникает.

Вопрос

Есть ли проблема с тем, что nginx не может получать большие ответы? Если так, разве это не должно сказать мне это? Я получил ошибку, прежде чем сказать, что отправленный мною запрос был слишком большим, но никогда не отвечал.

Ниже приведена конфигурация nginx контейнера-приложения для угловых приложений:

worker_processes 4;

events { worker_connections 1024; }

http {
        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 30m;

        #See http://blog.argteam.com/coding/hardening-node-js-for-production-part-2-using-nginx-to-avoid-node-js-load
        proxy_cache_path        /var/cache/nginx levels=1:2 keys_zone=one:8m max_size=3000m inactive=600m;
        proxy_temp_path         /var/tmp;
        include                 mime.types;
        default_type            application/octet-stream;
        sendfile                on;
        keepalive_timeout       65;

        gzip                    on;
        gzip_comp_level         6;
        gzip_vary               on;
        gzip_min_length         1000;
        gzip_proxied            any;
        gzip_types              text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
        gzip_buffers            16 8k;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /usr/share/nginx/html;
            index  index.html;
            expires -1;
            add_header Pragma "no-cache";
            add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
            try_files $uri$args $uri$args/ $uri $uri/ /index.html =404;
         }
    }

}

Что я пробовал до сих пор:

  • Я попытался добавить аргументы proxy_buffering и cache, чтобы исключить использование кэша, но это не имело никакого эффекта.
...