Прерывистое соединение отказано в статических ресурсах React, обслуживаемых с Nginx - PullRequest
0 голосов
/ 03 мая 2019

Я использую Google Kubernetes Engine для размещения простого бэкэнда Express API в контейнере узлов и внешнего интерфейса React в контейнере Nginx.

Локальный запуск интерфейса в режиме разработки с npm start отлично подходит для тестирования, все ресурсы загружаются надежно.Однако при развертывании моего внешнего интерфейса в моем кластере я сталкиваюсь с периодически возникающими проблемами с подключением.

И бэкэнд, и внешний интерфейс выставляются службой LoadBalancer, предоставляя 8080 для внутреннего интерфейса и 80 для внешнего интерфейса, оба на одном и том жеСтатический IP.

Когда я перехожу на мой статически обслуживаемый сайт, иногда каждый ресурс загружается нормально, и мое приложение работает, но иногда определенные ресурсы (каждый раз разные и кажущиеся произвольными) не загружаются из-за ошибки при отказе соединения.Иногда даже root / или /index.html терпит неудачу из-за сетевой ошибки.

Я пытался увеличить доступные ресурсы для моих узлов, плюс несколько nginx.conf конфигураций.Кроме того, я попытался удалить и воссоздать мой кластер, играя с кэшированием файлов (что помогает, но только маскирует основную проблему) и используя сжатие gzip для уменьшения размера передаваемых ресурсов.Я проверил все журналы из nginx или любых сборок контейнера

Ниже приведены мои Dockerfile и nginx.conf, я также могу включить свои YAML для kubernetes для front, back и службы LoadBalancer, если это может помочь.

Dockerfile

FROM node:8 as react-build
WORKDIR /app
COPY . .
RUN npm install && npm run-script build

FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=react-build /app/build /var/www
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

nginx.conf

worker_processes auto;

error_log stderr;

events {

    worker_connections 4000;

    use epoll;

    multi_accept on;
}

http {


    include       /etc/nginx/mime.types;

    default_type  application/octet-stream;

    access_log off;

    send_timeout 2;

    client_body_timeout 10;

    keepalive_timeout 30;

    keepalive_requests 100000;

    sendfile on;

    tcp_nopush on;

    tcp_nodelay on;

    gzip on;
    gzip_min_length 10240;
    gzip_comp_level 1;
    gzip_vary on;
    gzip_disable msie6;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types
        text/css
        text/javascript
        text/xml
        text/plain
        text/x-component
        application/javascript
        application/x-javascript
        application/json
        application/xml
        application/rss+xml
        application/atom+xml
        font/truetype
        font/opentype
        application/vnd.ms-fontobject
        image/svg+xml;

    server {

        listen          80;
        server_name     REDACTED;
        index           index.html index.htm;
        root            /var/www;

        location / {
            try_files $uri $uri/ /index.html;
        }

        location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
            expires 1M;
            access_log off;
            add_header Cache-Control "public";
        }

        # Javascript and CSS files
        location ~* \.(?:css|js)$ {

            try_files $uri =404;
            expires 1y;
            access_log off;
            add_header Cache-Control "public";
        }

    }

}

У меня нет требуемой 10 репутации, поэтому, к сожалению, я не могу вставлять скриншоты, но у меня есть связанные экраны ниже.

Если все загружается правильно, оно должно выглядеть аналогично связанному изображению, все ресурсы были загружены (у меня кеширование для тестирования):

https://i.imgur.com/8lMQlGb.png

Часто, однако, один илибольше ресурсов не загружается при отказе в соединении (как вы можете видеть, что сайт также не отображается, отображается только белый экран):

https://i.imgur.com/Q9oL2BC.png

Спасибо за любые идеимогу предложить!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...