有需求需要搭建一个上传文件服务器,最开始考虑使用Nginx+upload模块,后台php处理,后来尝试了一下tomcat+spring方法,都可以满足需求。
Nginx + upload module
网上的配置文章比较多,这里只是记录一下出现的坑吧。
1. nginx加上upload 模块后编译不过
upload module貌似只支持到nginx 1.3.8,开始使用高版本的nginx老是编译不过,后来搜到一篇文章,换成低版本的nginx解决了。安的比较久了,好像是ng版本比较新的时候build提示一大堆语法错误吧,反正是编译不过。
2. 临时路径的问题
配置里边有一项 :upload_store /data/tmpdir 1;
后面如果设置成 1 代表临时文件将要散列到你设置的目录中,而且要保证之前这些目录是存在的,也就是说你需要在/data/tmpdir目录下创建 0 到9 的9个目录,并且要保证有读写权限.(最好先全开吧,先保证运行起来。)
3后台php拿到传来的文件的问题
ng按照文档上的设置在php得到request中得不到传来的值,后来测试之后这样使用可以了:
conf:
upload_set_form_field $upload_field_name.name "$upload_file_name";
php:
$filePath = $_POST["file_path"];
客户端传参,在php中如果想得到的话,要这样设置
conf:
upload_pass_args on;
4 客户端通过chrome插件postman模拟测试post请求
在body中添加参数,file就是要上传的文件,id是自定义参数,在php中接收一下就好了。
5 压力测试工具
使用Apache 的jmeter工具
配置大概是这样的,可以再Thread Group中设置线程数,在summary report中查看结果,我模拟了100个线程10M的文件很快就传完了,这个跟网速和服务器配置有关。
6 未验证的问题
在网上查了直接设置后没验证的问题,关于ng配置中上传文件的最大值,和文件缓冲区大小,我的设置是这样的
conf:
client_max_body_size 512m;
client_body_buffer_size 50m;
php,去php.ini文件搜size,把有关的大小改一下,还有一个页面最多请求多久的时间调长些,根据需求吧。
7 dns的问题
运维那边配的域名和ip貌似出了些问题,导致访问域名传文件很慢,但是ip比较快,一直以为是ng哪的配置除了问题,今天发现ping域名出来的都不是这个ip,后来他们调好了速度快了,真是surprise!所以测试的时候可以都通过ip进行。
通过tomcat + spring部署
尝试这个方式是因为上面7 的问题始终没解决,不知道是不是ng哪的限制,所以使用这种方式看看结果,服务器这边都不是很熟,所以遇到的问题比较基础,比较多。
同样,记录几个遇到的坑吧。
1. tomcat配置
java环境的问题,执行./startup.sh后也没报错,我以为是启动成功了,结果访问不了,查看$tomcat_home下conf中的日志发现是jdk找不到
2. 部署位置
我开始按照教程开了一个虚拟目录,把spring打好包的war文件放到里边然后unzip出来,客户端访问老是显示资源文件找不到,这个可能是我部署的方式不太对,待验证,后来直接放到tomcat根目录webapps中,发现只要把war放进去,在tomcat开启的时候会自动解压部署上去的!
3. 部署时执行顺序的问题
使用log4j打印日志,调整项目的时候出现了好几次日志打不出来的情况,后来别人说可能是句柄的问题,现在还不知道正确的部署顺序应该是什么样的,不过现在先停掉tomcat,然后把war传上去,然后再打开tomcat,日志能正常打印
spring之前没用过,这块对于它的很多细节也不了解,现在是能跑通了,这边只是记录了一下。