Nginx服务的React静态资源上的间歇性连接被拒绝

时间:2019-05-03 04:12:41

标签: reactjs express nginx google-kubernetes-engine

我正在使用Google Kubernetes Engine在节点容器中托管一个简单的Express API后端,在Nginx容器中托管一个React前端。

使用npm start在开发模式下本地运行前端可以很好地进行测试,所有资源都可以可靠地加载。但是,当我将前端部署到群集时,会遇到间歇性的连接问题。

LoadBalancer服务公开了后端和前端,在同一静态IP上公开了8080(后端)和80(前端)。

当我导航到静态服务的站点时,有时每个资源都可以正常加载并且我的应用程序可以正常工作,但是有时某些资源(每次都不同,看似任意)由于连接拒绝错误而无法加载。有时甚至根//index.html也由于网络错误而失败。

我尝试增加节点的可用资源,以及一些nginx.conf配置。另外,我尝试删除并重新创建群集,使用文件缓存进行播放(这有助于但仅掩盖了潜在的问题),并使用gzip压缩来减小传输资源的大小。我已经检查了Nginx或所有容器构建中的所有日志

下面是我的Dockerfilenginx.conf,如果可以的话,我还可以包括用于前台,后台和LoadBalancer服务的kubernetes YAML。

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

感谢任何人都可以提供的见解!

0 个答案:

没有答案