共计 1734 个字符,预计需要花费 5 分钟才能阅读完成。
最近经常有人问图片上传怎么做,有哪些方案做比较好,也看到过有关于上传图片的做法,但是都不是最好的,今天再这里简单讲一下 Nginx 实现上传图片以及图片服务器的大致理念。
如果是个人项目或者企业小项目,仅仅只有十来号人使用的小项目,可以使用如下方案:
用户访问系统,使用上传图片功能,那么图片就上传到你的当前项目所在的 tomcat 服务器上,在 /image 下,上传成功后用户可以直接访问
http://ip:port/project/images/xxx.jpg
这样做在用户少的时候是没有问题的
当你的企业发展起来了,业务量增多了,使用的这个项目开始大起来了,发现系统速度变慢了,那么你就考虑到集群了对吧
那么好,假设你增加了一个 tomcatB,性能提高了一点,图片也成功上传了,做了负载均衡,假设图片上传的了 tomcatA(用户是不知道的)
第二次访问的时候(先不考虑 session 粘性不粘性的问题,假设是共享的),用户访问到了 tomcatB,图片没有了,是个大叉叉,
我的天呐!发什么什么事了,明明刚刚上传的图片没有了,
再刷新一下,欸!又有了?这是什么情况呢?
后台知道咋回事,但是用户不知道啊!!!
那么解决方案是这样的,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
更多 Nginx 相关教程见以下内容:
CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm
使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm
搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm
CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm
CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm
CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm
Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm
Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm
Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-04/130372.htm