下面使用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文件。

最新文章

  1. js阻止form表单重复提交
  2. Android Event
  3. Visual Studio 设置 Inherited include Directories
  4. 【Unity3D自学记录】判断物体是否在镜头内
  5. phpcms分页使用
  6. Codeforces Beta Round #2B(dp+数学)
  7. [Everyday Mathematics]20150204
  8. hadoop学习记录(四)hadoop2.6 hive配置
  9. c#进程间通讯方案之IPC通道
  10. MYSQL 调优系列
  11. awk的思维导图
  12. Android开源库loopj的android-async-http的 JsonHttpResponseHandler 存在死循环GC_CONCURRENT
  13. P3
  14. Python学习笔记 - 生成器generator
  15. java 虚拟机内存划分,类加载过程以及对象的初始化
  16. 初识SEO
  17. HTML之二 -特殊标签 与数据交互标签
  18. golang ffmpeg 做网络直播
  19. update + join 多表操作
  20. C#语言————第二章 C#语言快速热身

热门文章

  1. NLog日志框架简写用法
  2. polymer入门例子-已过时
  3. struts2+ckeditor配置图片上传
  4. WIN7或2008远程连接特别慢的解决方法 【转】
  5. SQL 判断数据库是否有相关表 字段
  6. 手把手教你搭建hadoop+hive测试环境(新手向)
  7. GO学习笔记 - 没有参数的 return 语句返回各个返回变量的当前值,这种用法被称作“裸”返回。
  8. 3XX重定向
  9. 为IEnumerable类型添加Add方法
  10. multiprocessor(下)