问题场景

  Nginx+Tomcat搭建,且cms由Nginx进行代理转发。如常见的8080端口转到80,或者其他服务器的80或8080端口等情况。之后通过80端口访问cms的时候发现前端以及后台很多的js加载一半,出现如图错误:

1

1

直接访问相关js也发现内容确实只加载了一半,强制刷新无用,依然只有一半。但是直接访问tomcat的80或者8080端口发现是没有问题的。

问题原因

Nginx代理之后会有相应的代理缓存区,缓存区默认只有几十K,某些版本的nginx默认设置中没有相关处理,导致部分文件代理是会出现加载不全的现象,其实不仅仅是JS文件。只是因为框架的JS文件略大,所以经常出现类似问题。

问题解决

在Nginx.conf中添加    proxy_buffer_size 128k;
            proxy_buffers   32 128k;
               proxy_busy_buffers_size 128k;

然后重启nginx,即可。Nginx在代理了相应服务后或根据我们配置的UpStream和location来获取相应的文件,首先文件会被解析到nginx的内存或者临时文件目录中,然后由nginx再来响应。那么当proxy_buffers和proxy_buffer_size以及proxy_busy_buffers_size 都太小时,会将内容根据nginx的配置生成到临时文件中,但是临时文件的大小也有默认值。所以当这四个值都过小时就会导致部分文件只加载一部分。所以要根据我们的服务器情况适当的调整proxy_buffers和proxy_buffer_size以及proxy_busy_buffers_size、proxy_temp_file_write_size。具体几个参数的详细如下

proxy_buffers   32 128k;  设置了32个缓存区,每个的大小是128k

proxy_buffer_size 128k; 每个缓存区的大小是128k,当两个值不一致时没有找到具体哪个有效,建议和上面的设置一致。

proxy_busy_buffers_size 128k;设置使用中的缓存区的大小,控制传输至客户端的缓存的最大

proxy_temp_file_write_size 缓存文件的大小