总结nginx常见操作

491 阅读4分钟

前言


二个方面

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/…