前言
- 【音乐博客】上线啦!
- 可能会针对音乐这方便介绍nginx的一些操作
二个方面
1. nginx服务器配置客户端浏览器缓存文件cache-control
- 场景:在某天早晨上班的期间,听着【音乐博客】,同事跟我说,你这个网站的音乐有做缓存吗?
- 思考:如果要做缓存,是在前端做缓存,正常我们都是将后端返回的数据存在本地,
但这可是音乐文件,存在哪呢?
如果是app的话,还可以存在本地文件里面,但浏览器没有权限让我在客户端里面新建文件夹,存音乐文件进去(×) - 如果没有做缓存的话,每次都是去拿服务器的文件,这样很浪费流量的,如图:

这首歌单曲循环下来,需要花费366M的流量,想想就觉得可怕,一定要把缓存做出来!
其实我们可以去看看人家qq音乐是怎么做的,经过观察,发现qq音乐是通过请求头添加Cache-Control: max-age = 7200

这个请求头:max-age = 100;请求完成,响应体保存一百秒,时间一到缓存就没有啦,需要从新请求服务器,去拿对应的数据,100秒期间,浏览器不会再次发送任何请求,只在本地缓存拿数据
这个请求头和我的场景真是很符合,因为这些歌曲基本是不需要怎么变化的
因为请求歌曲都是通过nginx获取的,所以我们在nginx的配置文件下做下修改
location / { # 7071端口即为frp监听的http端口 proxy_pass http://127.0.0.1:7071; #客户端缓存7天,有修改向服务器请求最新文件 add_header Cache-Control max-age=604800; #告诉浏览器,你这必须再次验证检查信息是否过期, 返回的代号就不是200而是304了 add_header Cache-Control must-revalidate; }- 配置成功,我们来看看浏览器是不是真的可以缓存歌曲

通过这个实战,也成功将我们的音乐文件缓存到客户端上,我们知道Cache-Control: max-age = 7200的用处了
2. nginx解决上传大文件失败
- 场景:使用frp的nginx分配多个端口,如:上面的8527服务是java的应用是通过frp暴露多个端口的其中一个,将文件上传到8527这个应用下,结果浏览器报了个跨域错误
- 遇到这种事情不要慌,无非就是前端和后端有没有跨域处理
- 前端排查确认无误,确实是写上跨域了,后端看一下,嗯,确实也是处理了跨域,正常的跨域就是前后端配置一下跨域就可以,可这次不一样,跨域不关前后端的事情,what?
- 真的是排查了一整天时间,和前端、后端人员探讨了一个下午,还是没有解决方案,不过后端人员倒是说:前端去请求node,然后node做中间层去请求java的8257应用,后端请求后端就不会有跨域这种事情了,毕竟跨域是浏览器的同源策略;
这样子也是行得通的,但是和我这个场景不太符合,前端直接去请求java就好,不太想要转弯抹角。 - 还有一种思路是:因为是跨域问题,我在nginx上做反向代理来解决前端跨域问题(虽然没试过,但感觉或许行得通,方法总是试出来的)
利用nginx做反向代理解决前端跨域问题 - 晚上突然想到,会不会是frp的问题?查了之后还真的是
- 相关文档:NGINX 服务器反向代理导致上传错误问题
- 导致上传文件失败原因:
- client_body_buffer_size 配置请求缓存区大小
- client_body_temp_path 设置临时文件存放路径。
- client_max_body_size 设置上传文件的最大值。
- 我在 nginx.conf 没有配置 client_body_buffer_size 的大小,client_body_buffer_size 系统默认 8K (32位)或者16K(64位),没有创建 client_body_temp_path 临时目录。如果上传超过16K的文件会提示失败。
- 工作原理:如果上传文件大小超过client_body_buffer_size 默认值就把会文件放到client_body_temp_path 设置的临时目录中。

得知情况后,我们在nginx配置文件下配置:
http { include mime.types; default_type application/octet-stream; client_max_body_size 200m; client_body_buffer_size 256k; client_body_temp_path /etc/nginx/proxy_temp; }- 这样子配置,虽然可以解决frp上传文件过大而报错的情况,但是上传文件速度很慢
- 分析:不知道是不是他去走服务器了,服务器宽带慢,以前应该直接走本地,本地的网络快,或者nginx可以设置上传限速(待研究),总算解决了frp上传文件过大的问题了。
参考
nginx服务器配置客户端浏览器缓存文件cache-control:www.imooc.com/wenda/detai…
NGINX 服务器反向代理导致上传错误问题 :free-e.net/402
利用nginx做反向代理解决前端跨域问题:www.cnblogs.com/lxlin/p/897…
Nginx上传和超时时间限制:www.cnblogs.com/kevingrace/…