最近常常有人问图片上传怎么作,有哪些方案作比较好,也看到过有关于上传图片的作法,可是都不是最好的,今天再这里简单讲一下Nginx实现上传图片以及图片服务器的大体理念。html
若是是我的项目或者企业小项目,仅仅只有十来号人使用的小项目,可使用以下方案:linux
用户访问系统,使用上传图片功能,那么图片就上传到你的当前项目所在的tomcat服务器上,在/image下,上传成功后用户能够直接访问nginx
http://ip:port/project/images/xxx.jpg数据库
这样作在用户少的时候是没有问题的tomcat
当你的企业发展起来了,业务量增多了,使用的这个项目开始大起来了,发现系统速度变慢了,那么你就考虑到集群了对吧服务器
那么好,假设你增长了一个tomcatB,性能提升了一点,图片也成功上传了,作了负载均衡,假设图片上传的了tomcatA(用户是不知道的)session
第二次访问的时候(先不考虑session粘性不粘性的问题,假设是共享的),用户访问到了tomcatB,图片没有了,是个大叉叉,并发
个人天呐!发什么什么事了,明明刚刚上传的图片没有了,负载均衡
再刷新一下,欸!又有了?这是什么状况呢?jsp
后台知道咋回事,可是用户不知道啊!!!
那么解决方案是这样的,tomcatA和B上传至图片服务器,这用户请求的时候只访问图片服务器的路径,这样就没问题了
有人会问图片服务器用什么来搭建呢?
tomcat?能够,可是tomcat主要处理jsp比较好,图片文件是静态资源,处理起来性能通常般
Apache?能够,纯C语言开发的,没问题,可是还不够好
nginx?对了,这个是目前比较流行的一个反向代理服务器,我在以前的文章有简单介绍过(http://www.cnblogs.com/leechenxiang/p/5327086.html)
理论的单台机子并发能达到5万,很是的叼,实际测试是2w左右
安装以下的方案去作,那么图片服务器就问题不大了,
固然,图片上传后,须要把图片的路径地址保存到数据库啊~~
我曾经见到过一套电子商务系统的图片上传是采用方案是相似1的,这么作没问题,
可是呢,图片竟然上传到他喵的MySQL某个表的某个字段中的,你妹啊,个人天呐!
怎么能够这么作,况且数据库没有分库分表分区建索引,好吧,这也是个人一个吐槽点,谁叫我曾经参与过呢
好吧,说了这么多都是理论,接下来的文章会具体说说怎么作。
Nginx建立虚拟静态服务器 http://www.linuxidc.com/Linux/2016-04/130373.htm