什么是ftp&在Linux上搭建ftp

FTP:(FTP是文件服务器,不要片面的理解为图片服务器)
     1.为什么要有FTP:
         1.常规的上传会经常导致用户的图片和文件丢失
         2.当用户量过大的时候,导致最终硬盘支撑不住,无法再让用户进行上传

     2.什么是FTP
         FTP是一个协议,和http/tcp/udp..这些协议一样
         http是网络协议,可以进行上网
         FTP叫做文件传输协议,也就是说可以通过这个协议,让服务器和服务器之间实现文件的传输
         (文件的传输无非就包含了两种:上传,下载)

     3.在实际开发工作中所遇到的问题
         3.1.如果头像更改了,多余出来的头像图片怎么处理?
         3.2.文件名有没有可能重复?
             文件名重复可以上传,默认会覆盖
             张三上传了一张头像:123.jpg
             李四上传了一张头像:123.jpg
             李四就把张三的覆盖了-->这就是代码事故
         3.3.随着头像/文件越来越多,如果客户端想要加载其中某一个图片/文件,需要消耗大量的查找时间,不方便寻找,如何处理?
         3.4.把图片存放到ftp服务器上,需要记录图片的地址,如何处理?
             存入到数据库中
         3.5.用户上传的图片过大,如何处理?(后期去讲(kafka))
             最好的结果使用压缩(zip,snappy...)

     4.Linux搭建ftp
         重点注意:
             ftp服务器的名称不能叫ftp(在创建Linux服务器的时候,无论是全名还是用户名都不能叫ftp,因为会和ftp这个关键字名称冲突,导致ftp下载失败)
             以后只要使用到Linux服务器的时候,绝对不能和关键字冲突(redis,zookeeper,nginx,es....)
         配置Linux服务器的时候,尽可能的不要使用安装版(mysql,redis,nginx...)(绿色版/免安装版/解压版)
         什么时候使用安装版来安装框架:
             只要Linux自带的有,但是在安装Linux的时候你安装的一个纯净的一个环境,这个时候就可以直接使用yum -y install进行安装
             否则其他的所有的框架都必须要使用免安装版本
         在windows你如果想把一个软件运行起来,就必须要去注册列表进行注册
         安装版会自动的去注册列表进行注册,免安装版本还得手动自己去注册列表中进行注册,会非常麻烦
         4.1.因为ftp是Linux本来就自带的,所以要先检测ftp是否存在
             检测已经开始运行的程序的时候:
                 ps -ef | grep xxx--->就可以检测当前正在运行的框架/软件/项目pid,端口号。。。
             检测已经安装了,但是没有运行的程序:
                 rpm -qa | grep xxx--->vsftpd(在Linux上ftp叫vsftpd)
             如果什么都没有显示,则说明没有安装
         4.2.安装ftp
             yum -y install vsftpd
             看到以下信息说明安装成功:
                 Running Transaction
                  Installing : vsftpd-2.2.2-24.el6.x86_64                                                           1/1 
                  Verifying  : vsftpd-2.2.2-24.el6.x86_64                                                           1/1 
                Installed:
                  vsftpd.x86_64 0:2.2.2-24.el6                                                                          
                Complete!
        4.3.启动ftp
            和防火墙启动一模一样
            service vsftpd start/stop/restart/status
        4.4.开启ftp的开机启动
            和防火墙也一模一样
            chkconfig vsftpd on/off/--list
        4.5.配置ftp
            Linux在安装ftp的时候,默认会直接安装在etc目录
            vim /etc/vsftpd/vsftpd.conf
            # 禁止匿名访问ftp服务器
            anonymous_enable=YES-->NO
            # 允许本地用户直接登录(方便程序员的操作)
            local_enable=YES
            # 让已经登录的用户可以拥有写的权限(上传权限)
            write_enable=YES
            # 默认umask端口号(远程用户连接ftp服务器的时候,端口号默认是022,但是对于本地用户端口号默认就是077端口号,让本地用户也使用022端口号,禁用掉077端口号)
            local_umask=022
            # ftp上传的时候也有可能报错(比如硬盘已经满了,无法继续上传),于是就把这些错误和上传日志信息记录下来
            # 默认保存上传和下载的日志记录
            xferlog_enable=YES
            # 会把日志存放在/var/log/xferlog中(不需要手动创建,当上传/下载的时候,ftp如果检测没有该目录则会自动生成)
            xferlog_file=/var/log/xferlog
            # 当上传/下载的时候会记录日志,这些日志有可能是json格式(默认是自动格式化)
            # 不让ftp自动格式化这些日志信息(因为会占用比较高的内存)
            xferlog_std_format=YES--->NO
            # 允许ASCII码模式的上传和下载
            ascii_upload_enable=YES
            ascii_download_enable=YES
            # 在ftp这个框架中,连接的端口号和上传以及下载所使用的端口号是不同的(连接的时候用的022,上传和下载的时候使用的20端口号)
            connect_from_port_20=YES
            # 开启ftp的欢迎标语(无所谓的)
            ftpd_banner=Welcome to blah FTP service.

            # 以下的三个配置非常非常重点,如果配置不好,导致java连接ftp的时候连接不上,还有可能导致java连接ftp成功后创建文件夹的时候创建不了
            chroot_local_user=YES-->NO(有坑:如果使用YES这个值,最终在java连接ftp后创建文件夹的时候无法创建)
            chroot_list_enable=YES
            # chroot_list需要自己手动在Linux服务器上进行创建
            touch chroot_list
            chroot_list_file=/etc/vsftpd/chroot_list
            # 使用standalone模式在ipv4下运行
            listen=YES
            # 在Linux上所显示的名称,默认就是vsftpd(可以修改,但是不推荐)
            pam_service_name=vsftpd
        4.6.重启ftp服务(让4.5步的配置加载进ftp中)
            service vsftpd restart
        4.7.执行以下5个命令,让第4.5步的配置生效
            getsebool -a | grep ftpd(可以不执行,就是来查看的)
            以下的4个命令执行起来比较慢,ftp需要自动重启加载,并不是Linux死机了
            setsebool -P(大写) ftp_home_dir 1
            setsebool -P allow_ftpd_full_access 1
            setsebool -P allow_ftpd_use_cifs 1
            setsebool -P allow_ftpd_use_nfs 1
        4.8.因为最终要确保ftp的安全性,所以需给ftp创建账号和密码
            ftp规定默认是不能使用Linux的root用户进行连接的,所以需要创建用户
            useradd ftpuser(用户名) -s /sbin/nologin -d /home/ftp(需要自己手动输入,默认是没有该文件夹的)
            /home/ftp:就是以后文件上传的目录
        4.9.为ftp用户创建密码
            passwd ftpuser
        4.10.测试ftp服务器是否搭建成功
            filazilla工具(免费的,可以直接从百度下载)
            打开站点管理器-->点击新站点-->不需要更改协议和端口号
            主机:
                ftp服务器的ip地址
            登录类型:
                使用默认的(正常)
            用户名:
                刚才搭建ftp服务器的时候所创建用户
            密码:
                同样是创建的用户密码
        4.11.但是在使用浏览器进行访问的时候,突然访问不到
            但是使用ftp协议
            ftp://192.168.23.155可以直接访问
            需求是直接使用http协议,然后输入192.168.23.155/1.txt--->可以直接在浏览器上显示刚才所上传的文件内容(图片)
            这个原因其实就是ftp根本就不会支持http协议,因为ftp只支持ftp协议

    5.虽然ftp服务器已经搭建完毕,也可以成功的上传文件和下载文件,但是并没有办法做到直接通过浏览器显示文件内容,这一块就需要代理来进行搞定(nginx)
        把nginx和ftp配置在同一台服务器上
            192.168.23.155:
                ftp-->最终没有办法直接显示在浏览器上(只有上传和下载)
                nginx来做路径的映射(咱们现在已经知道ftp最终就会把文件上传到/home/ftp目录中)
            在浏览器中只要输入192.168.23.155/1.txt就能直接访问到1.txt文件中的内容
        实际开发中的分布式是这样的:
            192.168.23.155:
                ftp
            192.168.23.156:
                nginx
            当去访问192.168.23.156/1.txt直接其实访问的是192.168.23.155/home/ftp/1.txt文件
            这种配置方法需要免秘钥,所以咱们放到项目中实现,今天的主要内容讲ftp,我不想在这浪费时间
        nginx的配置:
            略
        5.1.虽然nginx的配置我不写了,但是需要修改nginx.conf(/user/local/nginx-1.17.9/conf)中内容:
            user  nobody--->root;
            而且配置一定要顶格完成,否则不生效
            location / {
                root   html-->ftp的上传路径(/home/ftp);
                index  index.html index.htm;
            }
        5.2.启动nginx
            ./nginx
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值