nginx+ftp搭建图片服务器(Windows Server服务器环境下)

几种图片服务器的对比

1、直接使用ftp服务器,访问图片路径为 ftp://账户:密码@192.168.0.106/31275-105.jpg

不采用这种方式,不安全容易暴露ftp账户信息

2、直接使用IIS或Tomcat等服务器在项目中访问,图片少的情况可以考虑。商城网站则不行,图片访问处理需搭建图片服务器

3、ftp+nginx服务器,ftp负责上传图片,nginx负责图片的访问

一、需要的组件

1、ftp服务器(图片上传,本文选用IIS为容器)

ps Linux操作系统  可安装vsftpd作为服务器

2、nginx服务器

a、http服务:可以使用nginx做静态资源服务器。也可以使用apache。推荐使用nginx,效率更高。

b、反向代理 实现 负载均衡

二、nginx服务器的部署

nginx下载地址 http://nginx.org/en/download.html

解压安装包,免安装运行

nginx cmd命令

start nginx //启动nginx

nginx -s stop // 停止nginx

nginx -s reload // 重新加载配置文件

nginx -s quit // 退出nginx

nginx -t //检查配置文件是否正确

nginx -v //查看nginx版本号

1、配置端口号和访问路径

conf目录下的  nginx.conf 配置文件

配置文件介绍戳这   http://www.cnblogs.com/knowledgesea/p/5175711.html

修改端口号 为9090

启动nginx   回到nginx文件夹根目录,按住shift键点击鼠标右键,选择右键菜单中的在此处打开命令窗口,输入start nginx 命令

成功访问

2、添加图片服务访问配置

location ~ \.(gif|jpg|jpeg|png|bmp|swf)$ {
#默认的图片路径,也是ftp上传文件存放的路径,只要后缀是以上的都会到这个路径下搜索
root C:/imgextra;
}

location ~ \.(gif|jpg|jpeg|png|bmp|swf)$ {
            #默认的图片路径,也是ftp上传文件存放的路径,只要后缀是以上的都会到这个路径下搜索
	    root         C:/imgextra;
}

  

添加完成以后在cmd中执行  nginx -s reload 重新加载配置使其生效

图片文件所在路径

访问成功

3、图片存放路径分析

先来看看大型商城的图片路径

天猫图片存储

https://gdp.alicdn.com/imgextra/i2/1856815898/TB2QxuMuHBnpuFjSZFGXXX51pXa_!!1856815898.jpg

京东图片存储

https://img30.360buyimg.com/sku/jfs/t4816/236/2599170601/86961/b24bbc4/5902ff58Nc4ceea7c.jpg

当当图片存储

http://img3x5.ddimg.cn/19/20/1206933175-1_x_6.jpg

分析发现几乎都采用CDN和单独的域名来作为独立的图片服务器,目的是为了减少业务服务器的并发访问量。

关于图片服务器架构介绍戳这里

http://blog.csdn.net/dinglang_2009/article/details/31450731

三、FTP服务的安装与使用介绍

1、windows中安装使用FTP服务器请参考

http://blog.csdn.net/w1014074794/article/details/52075285

2、java上传文件到FTP服务器工具类

所需jar包    commons-net-1.4.1.jar

http://files.cnblogs.com/files/cczheng-666/commons-net-1.4.1.zip

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

public class FtpUtil {

	/**
	 * Description: 向FTP服务器上传文件
	 * @param host FTP服务器hostname
	 * @param port FTP服务器端口
	 * @param username FTP登录账号
	 * @param password FTP登录密码
	 * @param basePath FTP服务器基础目录,需要绝对路径 比如:/home/ftpuser/www/images
	 * @param filePath FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath
	 * @param filename 上传到FTP服务器上的文件名
	 * @param input 输入流
	 * @return 成功返回true,否则返回false
	 */
	public static boolean uploadFile(String host, int port, String username, String password, String basePath,
			String filePath, String filename, InputStream input) {
		boolean result = false;
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			ftp.connect(host, port);// 连接FTP服务器
			// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
			ftp.login(username, password);// 登录
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return result;
			}
			//切换到上传目录
			if (!ftp.changeWorkingDirectory(basePath+filePath)) {
				//如果目录不存在创建目录
				String[] dirs = filePath.split("/");
				String tempPath = basePath;
				for (String dir : dirs) {
					if (null == dir || "".equals(dir)) continue;
					tempPath += "/" + dir;
					if (!ftp.changeWorkingDirectory(tempPath)) {
						if (!ftp.makeDirectory(tempPath)) {
							return result;
						} else {
							ftp.changeWorkingDirectory(tempPath);
						}
					}
				}
			}
			//设置上传文件的类型为二进制类型
			ftp.setFileType(FTP.BINARY_FILE_TYPE);
			//上传文件
			if (!ftp.storeFile(filename, input)) {
				return result;
			}
			input.close();
			ftp.logout();
			result = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return result;
	}

	/**
	 * Description: 从FTP服务器下载文件
	 * @param host FTP服务器hostname
	 * @param port FTP服务器端口
	 * @param username FTP登录账号
	 * @param password FTP登录密码
	 * @param remotePath FTP服务器上的相对路径
	 * @param fileName 要下载的文件名
	 * @param localPath 下载后保存到本地的路径
	 * @return
	 */
	public static boolean downloadFile(String host, int port, String username, String password, String remotePath,
			String fileName, String localPath) {
		boolean result = false;
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			ftp.connect(host, port);
			// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
			ftp.login(username, password);// 登录
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return result;
			}
			ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
			FTPFile[] fs = ftp.listFiles();
			for (FTPFile ff : fs) {
				if (ff.getName().equals(fileName)) {
					File localFile = new File(localPath + "/" + ff.getName());

					OutputStream is = new FileOutputStream(localFile);
					ftp.retrieveFile(ff.getName(), is);
					is.close();
				}
			}

			ftp.logout();
			result = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return result;
	}
}

  

时间: 2024-10-07 15:38:07

nginx+ftp搭建图片服务器(Windows Server服务器环境下)的相关文章

Windows Server 2008 R2下SVN服务器的搭建

Windows Server 2008 R2下SVN服务器的搭建 一.需要软件 1.服务器端 VisualSVN-Server-3.3.1-x64 2.客户端 TortoiseSVN-1.8.11.26392-x64-svn-1.8.13 3.客户端中文语言包 LanguagePack_1.8.11.26392-x64-zh_CN 二.安装 1.安装VisualSVN-Server 1 选择visualsvn server and management: 勾选Add Subversion com

如何在Windows Server 2008 R2下搭建FTP服务

在Windows Server 2008 R2下搭建FTP服务,供客户端读取和上传文件 百度经验:jingyan.baidu.com 工具/原料 Windows Server 2008 R2 百度经验:jingyan.baidu.com 方法/步骤 1 安装FTP服务 开始-->管理工具-->服务器管理器 步骤阅读 2 安装IIS/FTP角色 打开服务器管理器,找到添加角色,然后点击,弹出添加角色对话框,选择下一步 步骤阅读 3 选择Web服务器(IIS),然后选择FTP服务,直到安装完成.

asp.net网站部署在云服务器windows server 2008上

搭建一个网站需要以下4个准备: 1.域名解析 2.(云)服务器 3.数据库 4.网站代码 其中1可以可以去DNSPOD申请,同时需要进行备案,在上面就都可以完成.2用的是阿里云服务器windows server 2008 R2,去阿里云购买一个,一般400多一个月就好.3的数据库用的sql server2005,直接在云服务器上安装就行.4网站代码用的asp.net.好了,来看看发布一个网站的完整流程 1.vs中(用的vs2013)点击发布,一路默认配置就好 2.在发布后的文件夹根目录中找到we

windows server 服务器添加免费域名证书的方法(Let's Encrypt)

在 windows server 服务器上可以通过 win-acme工具添加ssl 1.首先下载工具 https://github.com/PKISharp/win-acme/releases 最新版本即可 百度网盘 https://pan.baidu.com/s/12IfBIA6wh9jVH5pKKQ9Yww 2.进入服务器,下载解压,直接运行letsencrypt.exe 有可能会提示需要下载一个包,直接安装即可 3.按照提示一步一步操作即可 4.这个免费证书每6个月需要续期一次,也提供续期

在Windows Server服务器上安装TeamViewer

在Windows Server服务器上安装TeamViewer,则不允许选择"个人/非商务用途",并提示"仅商务用户"可以在服务器操作上使用TeamViewer.也就是说:在Windows 2003 Server等服务器操作系统上安装,则是商务用户. 要在服务器操作系统上按照"个人/非商务用途"安装,则需要做如下设置:安装TeamViewer前先点击右键,在兼容性里选择Windows XP.设置完毕后再双击安装即可选择"个人/非商务用途

使用Nginx + unicorn搭建ruby on rails的生产环境

有三台机器,操作系统都是CentOS 6.3 64位:其中172.16.9.100,安装Nginx服务器:另外的两台172.16.9.101和172.16.9.102安装unicorn,作为RoR的应用服务器.在这里先保证ruby及rails已经在101和102两台机器上配置好,这是前提.如何安装Nginx及RoR的环境就不在这里说了,很多文章都介绍得很详细. 这里假设项目在/var/www/demo_project文件夹中 在101上使用 gem install unicorn 命令安装uni

基于Windows Server 2012 R2下的DHCP配置

本篇博客,主要介质如何实现Windows Server 2012 R2下的配置及启用故障转移功能 1) 登录DHCP01服务器,单击DHCP,如(图1)所示: 2) 在DHCP控制台页面中,右键IPV4,选择"新建作用域",如(图2) 3) 在"欢迎使用新建作用域向导"页面中,单击"下一步"按钮,如(图3)所示: 4) 在"新建作用域向导"页面中,根据要求输入作用域名称,如(图4)所示: 5) 在"IP地址范围&qu

windows server 2088 r2 下发布网站excel有时候无法下载文档

最近将公司网站服务器更新了系统,从win2003 到 win2008 r2 (64bit),一切正常,但是使用网站的过程中发现了一个比较奇怪的问题,就是,有时候网站的excel文档无法下载,但是我什么都不做只需要登录下服务器,就又能下载,刚开始没有注意,后来发现经常有反馈说文档无法下载,我就开始调查这个问题 我发现了一个规律,就是我每次远程登录之后,服务器上的登录信息就会被消除,而我登录之后,我这边再次断开连接之后,服务器的登录信息被消除后,网站就无法下载文档.也就是说,如果服务器当前没有登录账

【转】Windows Server 2008 R2下安装 .net framework3.5

原文地址:http://hi.baidu.com/tonny_dxf/item/6831bcdc3d7c06e7b2f7777c [你必须用角色管理工具安装.net framework3.5] 解决办法:服务器管理->功能->添加功能->钩上.netFramework3.5即可.(不需要framework3.5包,系统自带) 进入下一步, 点击.net Framework3.5.1功能时自动弹出2处的对话框: 选择<新增所需的功能>, 然后就会出现如下图所示的页面: 点击下一