Я запускаю угловое приложение внутри контейнера докера , в котором 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 успешно получает ответ, но когда пользовательский интерфейс пытается его использовать, он выдает ошибку.
Пример этой ошибки:
- Когда число объектов , возвращаемых в этом списке, равно 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, чтобы исключить использование кэша, но это не имело никакого эффекта.