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文件。

 

 

 

posted @ 2018-06-02 14:38  Jepson6669  阅读(499)  评论(0编辑  收藏  举报