ftp&nginx搭建图片服务器
下面使用ftp+nginx搭建一个简单的服务器
ftp用于文件的传输
nginx提供http服务
nginx服务器的安装和配置可以参照之前的教程:nginx安装及其配置详细教程
下面介绍ftp服务的安装及其配置
1 安装过程
1 查看是否已经安装了vsftpd
# rpm -qa | grep vsftpd
如果出现下面的信息表示已经安装过了,如果没有就是没有安装。
2.没有安装的话,执行下面的命令进行安装
# yum -y install vsftpd
-y:对所有的提问都回答“yes”; 出现complete表示安装完成。
安装过程还是非常的简单的。
2 防火墙开启21号端口
/sbin/iptables -I INPUT -p tcp --dport 21 -j ACCEPT
/etc/rc.d/init.d/iptables save
上面是两条命令需要分别执行
到这里外网就可以访问进去了。
3 修改selinux
外网是可以访问上去了,可以发现没法返回目录(使用ftp的主动模式,被动模式还是无法访问),也上传不了,这是因为selinux的原因。
执行一下命令查看状态
# getsebool -a | grep ftp
执行上面命令,再返回的结果看到两行都是off,代表,没有开启外网的访问
依次执行下面两条命令进行解决:
[root@admin ~]# setsebool -P allow_ftpd_full_access on
[root@admin ~]# setsebool -P ftp_home_dir on
4 FileZilla主被动模式的修改
这个软件是免费,可以自行安装
5 关闭匿名访问
# vim /etc/vsftpd/vsftpd.conf
修改之后重启一下服务:
# service vsftpd restart
服务的其它相关操作
# service vsftpd status 查看服务的状态 # service vsftpd restart 重启服务 # service vsftpd stop 停止服务
6 设置开机自启动
# chkconfig vsftpd on
7 无法使用root用户问题的解决
通过前面的步骤,我们已经安装了vsftpd服务。
可以通过命令service vsftpd status查看服务的状态:可以看到服务也已经运行了。
这个时候我们就应该检查配置了,基本上就是配置的问题:
ftpusers:位于/etc/vsftpd/目录下。它指定了哪些用户账户不能访问FTP服务器,例如root等。
我们需要将里面的root注释掉,或者删除
# vim /etc/vsftpd/ftpusers
修改前:
修改后:
user_list:位于/etc/vsftpd/目录下。该文件里的用户账户在默认情况下也不能访问FTP服务器,
仅当vsftpd .conf配置文件里启用userlist_enable=NO选项时才允许访问。
我们需要将里面的root注释掉,或者删除
# vim /etc/vsftpd/user_list
修改前:
修改后:
当然我们也可以直接创建一个用户,它不在这两个列表里面,同样可以访问。
修改完成这两个地方之后,记得重启让其生效。
# service vsftpd restart
重启之后就可以正常连接上了:
双击本地的图片,即可将其传上去了。
我们只需要将图片传到nginx服务器server配置的位置,然后就可以在浏览器访问到了。
8 上传图片到nginx服务器server配置的位置
1 上传图片
2 访问
9 使用java代码访问ftp服务
使用apache提供的一个工具包:commons-net.jar.
项目中需要依赖此jar包。
java测试代码如下:
@Test public void testFtpClient1() throws Exception{ //创建一个FTPClient对象 FTPClient ftpClient = new FTPClient(); //创建FTP连接,端口号可以设定,我的是22,默认是21 ftpClient.connect("192.168.2*.*",21); //登录FTP服务器,使用用户名和密码 ftpClient.login("root", "root"); //上传文件,读取本地文件 String path = "C:/Users/jepson/Pictures/download/ad/ID1/ertong.jpg"; FileInputStream inputStream = new FileInputStream(new File(path)); ftpClient.setBufferSize(1024); //设置缓冲池大小 ftpClient.setFileType(FTP.BINARY_FILE_TYPE);//此处是重点,要不就服务器的图像就被损坏 ftpClient.enterLocalPassiveMode(); //设置被动模式,我测试主动模式一直返回false,不知道为什么。 ftpClient.setControlEncoding("UTF-8"); //设置编码方式 //设置上传的路径 String pathname = "/usr/local/nginx/html";//这个路径就是FTP服务端存储的路径,可以从FileZilla中获取 ftpClient.changeWorkingDirectory(pathname); //参数一:服务器端文档名;参数二:上传文档的inputStream String remote = "h1.jpg"; boolean storeFile = ftpClient.storeFile(remote, inputStream); System.out.println(storeFile); //关闭连接 ftpClient.logout(); }
10 主动模式和被动模式入门介绍
(1) PORT(主动模式)
PORT中文称为主动模式,工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图。
(2) PASV(被动模式)
PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:
2.两种模式的比较
从上面的运行原来看到,主动模式和被动模式的不同简单概述为: 主动模式传送数据时是“服务器”连接到“客户端”的端口;被动模式传送数据是“客户端”连接到“服务器”的端口。
主动模式需要客户端必须开放端口给服务器,很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。
被动模式只需要服务器端开放端口给客户端连接就行了。
来源于:https://www.cnblogs.com/huhaoshida/p/5412615.html
11 nginx服务器server配置
1 server配置参数解释
server {# 服务名及配置,一个服务下可以有多个location 用来表示不同的反向代理 listen 80; # 端口号 server_name localhost; #主机名,默认是本主机 #charset koi8-r; #access_log logs/host.access.log main; location / { # /表示根目录,该配置表示Nginx默认打开/www下的index.html root /www; #根目录,该配置表示Nginx默认打开/www index index.html index.htm; #若index.html 不存在,则打开index.htm } #添加jeeCms代理 npl 20160920 location /jeeCms/ { # 过滤形如localhost:80/jeeCms/的url proxy_pass http://192.168.2.8:8070/jeeCms/;#转发至形如http://192.168.2.8:8070/jeeCms/的地址 proxy_redirect off; # 关闭重定向 proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #添加ctp-war代理 npl 20160920 location /ctp-war/ {# 过滤形如localhost:80/ctp-war/的url proxy_pass http://192.168.2.8:8020/ctp-war/; #转发至形如http://192.168.2.8:8070/ctp-war/的地址 proxy_redirect off;# 关闭重定向 proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
2 我的配置
为了保证可以使用我是直接复制nginx下面html目录到var/ftp/目录下面的,然后修改名称为images.
配置完成之后刷新一下nginx的配置文件,因为我的nginx已经配置了自启动,并且chkconfig管理服务。
所以直接执行命令service nginx reload刷新配置文件。如果没有配置的可以执行./nginx -s reload刷新配置
里面我上传了一个hello.jpg图片。
浏览器输入:192.168.25.128/hello.jpg即可访问到这个图片。
因为默认就是去找var/ftp/images下面的hello.jpg文件。