问题场景
Nginx+Tomcat搭建,且cms由Nginx进行代理转发。如常见的8080端口转到80,或者其他服务器的80或8080端口等情况。之后通过80端口访问cms的时候发现前端以及后台很多的js加载一半,出现如图错误:
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 缓存文件的大小
|
所有评论仅代表网友意见