VSFTPD+Nginx

VSFTPD+Nginx

VSFTPD+Nginx

VSFTPD简介(主要是文件上传和下载的功能)安装VSFTPDFtpClient反向代理和正向代理(客户端是否知道最终访问的真实地址)

安装 nginx(俄罗斯人发明的)使用Nginx代理ftpuser目录

VSFTPD简介(主要是文件上传和下载的功能)

1.linux的组件(一款软件),安装到linux后通过java代码(FtpClient)实现文件上传

2.VSFTPD基于FTP协议

3.为什么要使用VSFTPD?

3.1 之前实现文件上传

客户端浏览器 向一个 集群(文件上传功能) 上传文件时,存储到了当前这个tomcat(A),而下次访问到了tomcat(B)时,这个文件就不存在

3.2 使用VSFTPD优化后

客户端浏览器 依旧是向 一个 集群(文件上传功能)上传文件,此时会有一个 文件服务器(安装了VSFTPD组件的服务器), 当前tomcat(A)就会使用 ftpClient 把上传过来的文件 存储到 文件服务器上 当下次访问到tomcat(B)时,就可以到文件服务器取到该文件。

3.2.1 如果希望在客户端直接访问文件服务器中的文件,由于 VSFTPD 是基于 FTP 协议的,客户端浏览器是需要通过 HTTP 协议访问图片的

3.2.1.1 解决办法使用 Nginx 进行反向代理

安装VSFTPD

1.安装 vsftpd 组件

# yum -y install vsftpd

yum install 安装(从centos中心库下载)

-y 表示遇到所有需要确定的地方 yes

vsftpd 下载的文件名

安装完成后,有/etc/vsftpd/vsftpd.conf文件,是vsftpd的配置文件

2.添加一个 ftp 用户

此用户就是用来登录ftp服务器用的

# useradd ftpuser

这样一个用户建完,可以用这个登录,记得用普通登录不要用匿名了,登录后的默认路径为 /home/ftpuser

3.给 ftp 用户添加密码

# passwd ftpuser

输入两次密码后修改密码

4.防火墙开启21端口

因为 ftp 协议默认的端口为21,而centos中默认是没有开启的,所以要修改 iptables 文件

# vim /etc/sysconfig/iptables

在上面有 22 端口的,复制一行改成 21 ,然后保存并退出

重启iptables

# service iptables restart

5.修改selinux(系统服务)

外网是可以访问上去了,可是发现没法返回目录(使用 ftp 的主动模式、被动模式还是无法访问),也上传不了。是selinux的问题

修改 selinux:

# getsebool -a|grep ftp

开启

allow_ftpd_full_access-->off

外界是否能够通过 ftp 协议来访问自己

ftp_home_dir-->off

我们是否可以访问 ftp 对应的文件夹

执行上面的命令,在返回结果中可以看到,这两行都是 off ,表示没有开启 外网的访问

(P是大写的P)

# setsebool -P allow_ftpd_full_access on

# setsebool -P ftp_home_dir on

6.关闭匿名访问

修改 /etc/vsftpd/vsftpd.conf 文件

修改成

anonymous_enables=NO

重启 ftp 服务:

# service vsftpd restart

如果之前没开过这个服务,执行会出问题,在执行一次就ok了

7.开启被动模式

默认是开启的,但是要指定一个端口范围,打开 vsftpd.conf 文件,在后面加上

pasv_min_port=30000

pasv_max_port=30999

表示端口范围为 30000~30999,这个可以随意更改,改完之后重启一下 vsftpd

由于指定这段端口的范围,iptables 中也要相应的开启这个范围,所以需要打开 iptables 文件

在21下面 再起一行 ,将 21 端口所在行 复制一份 将 21 改为 30000:30999 然后保存,重启iptables

8.设置开机启动 vsftpd ftp 服务

# chkconfig vsftpd on

使用浏览器访问 ftp 服务器 资源

ftp://192.168.160.131/ 需要输入用户名和密码

ftp://用户名:密码@192.168.160.131 不需要输入用户名和密码

可以使用上面两种格式在浏览器访问到对应的图片(不推荐使用)

在ie中访问的是linux的根目录

在谷歌(火狐)中访问的是 ftpuser 目录

FtpClient

1.java 技术,使用 ftpclient ,实现使用java代码上传文件到 vsftpd 服务端

不依赖容器,纯java项目即可使用

2.代码示例

FTPClient ftp = new FTPClient();

//设置ip和端口,写在用户名和密码前

ftp.connect("192.168.160.131",21);

//设置登录时的用户名和密码

ftp.login("ftpuser","ftpuser");

//设置上传文件类型

//设置上传文件类型为二进制文件类型

ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

//设置上传文件流

InputStream is = new FileInputStream("E:/2.jpg");

//第一个参数是 存储时名称 第二个参数是:上传的文件流

ftp.storeFile("abc.jpg",is);//第一参数是存储是的名字 第二个参数是流对象

//退出

ftp.logout();

3.使用 web 项目结合 FTPClient完成

使用浏览器进行文件上传-->将文件上传到Tomcat中(通过MultipartFile 获取上传文件流,使用FtpClient上传到Linux中VSFTPD)

反向代理和正向代理(客户端是否知道最终访问的真实地址)

1.正向代理服务器(类似翻墙软件)

1.1 客户端知道最终要访问的服务器地址

2.反向代理服务器

2.1 服务器只知道代理服务器地址,而不知道真实访问的服务器地址

客户端输入代理服务器地址-->访问反向代理服务器-->真实访问地址不知道

nginx 和 VSFTPD 要安装在一台服务器上

客户端访问 nginx(http协议) ,nginx帮我们去 VSFTPD(图片服务器)访问图片

把ftpuser的权限赋给nginx ,这样就可以通过 nginx 访问到图片

安装 nginx(俄罗斯人发明的)

1.nginx安装环境

nginx是c语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境

gcc:(c语言库)

安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要进行安装

yum install gcc-c++ -y

PCRE:

PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库

yum install -y pcre pcre-devel

注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。

zlib:

zlib库提供了很多中亚索和解压缩的方式,nginx使用zlib对http包的内容进行gzip(解压),所以需要在linux安装zlib库

yum install -y zlib zlib-devel

openssl:

openssl 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的秘钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

yum install -y openssl openssl-devel

2.解压nginx安装包

tar -zxvf nginx-1.8.0.tar.gz

cd nginx-1.8.0

2.1 configure

./configure-help 查询详细参数

参数设置:

./configure \

--prefix=/usr/local/nginx\

--pid-path=/var/run/nginx/nginx.pid\

--lock-path=/var/lock/nginx.lock\

--error-log-path=/var/log/nginx/error.log\

--http-log-path=/var/log/nginx/access.log\

--with-http_gzip_static_module\

--http-client-body-temp-path=/var/temp/nginx/client\

--http-proxy-temp-path=/var/temp/nginx/proxy\

--http-fastcgi-temp-path=/var/temp/nginx/fastcgi\

--http-uwsgi-temp-path=/var/temp/nginx/uwsgi\

--http-svgi-temp-path=/var/temp/nginx/scgi

注意上面将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录

2.2 编译安装

make

make instal

2.3 启动nginx

cd /usr/local/nginx/sbin

./nginx

同时开启80端口

2.4 停止nginx

方式1:快速停止

cd /usr/local/nginx/sbin

./nginx -s stop

此方式相当于先查出nginx进程id在使用kill命令强制杀掉进程

方式2:完整停止(建议使用)

cd /usr/local/nginx/sbin

./nginx -s quit

此方式停止步骤是待nginx进程处理任务完毕进行停止

2.5 重启nginx

方式1:先停止再启动(建议使用)

对nginx进行重启相当于先停止nginx在启动nginx,即先执行停止命令再执行启动命令。

如下:

./nginx -s quit

./nginx

方式2:重新加载配置文件

当nginx的配置文件nginx.conf修改后,要想让配置生效需要重启nginx,使用-s reload不用先停止nginx再启动nginx即可将配置信息在nginx中生效,如下:

./nginx -s reload

2.6 测试

nginx安装成功,启动nginx,即可访问虚拟机上的nginx

输入http://虚拟机ip

出现 Welcome to nginx

说明安装成功

2.7 开机自启动nginx

2.7.1 编写shell脚本

这里使用的是编写shell脚本的方式来处理

vi /etc/init.d/nginx (输入下面的代码)

#!/bin/bash

# nginx Startup script for the Nginx HTTP Server

# it is v.0.0.2 version. # chkconfig: - 85 15

# description: Nginx is a high-performance web and proxy server. # It has a lot of features, but it's not for everyone. # processname: nginx

# pidfile: /var/run/nginx.pid

# config: /usr/local/nginx/conf/nginx.conf

nginxd=/usr/local/nginx/sbin/nginx

nginx_config=/usr/local/nginx/conf/nginx.conf

nginx_pid=/var/run/nginx.pid

RETVAL=0

prog="nginx" # Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0

[ -x $nginxd ] || exit 0

# Start nginx daemons functions. start() {

if [ -e $nginx_pid ];then

echo "nginx already running...." exit 1

fi

echo -n $"Starting $prog: " daemon $nginxd -c ${nginx_config}

RETVAL=$?

echo

[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx

return $RETVAL

}

# Stop nginx daemons functions. stop() {

echo -n $"Stopping $prog: " killproc $nginxd

RETVAL=$?

echo

[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid

}

# reload nginx service functions. reload() {

echo -n $"Reloading $prog: " #kill -HUP `cat ${nginx_pid}` killproc $nginxd -HUP

RETVAL=$?

echo

}

# See how we were called. case "$1" in

start)

start

;;

stop)

stop

;;

reload)

reload

;;

restart)

stop

start

;;

status)

status $prog

RETVAL=$?

;; *)

echo $"Usage: $prog {start|stop|restart|reload|status|help}" exit 1

esac

exit $RETVAL

:wq 保存并退出

7.2 设置文件的访问权限

chmod a+x /etc/init.d/nginx (a+x ==> all user can execute 所有用户可执行)

这样在控制台就很容易的操作nginx了:查看nginx当前状态、启动nginx、停止nginx、重启nginx

#!/bin/bash

# nginx Startup script for the Nginx HTTP Server

# it is v.0.0.2 version.

# chkconfig: - 85 15

# description: Nginx is a high-performance web and proxy server.

# It has a lot of features, but it's not for everyone.

# processname: nginx

# pidfile: /var/run/nginx.pid

# config: /usr/local/nginx/conf/nginx.conf

nginxd=/usr/local/nginx/sbin/nginx

nginx_config=/usr/local/nginx/conf/nginx.conf

nginx_pid=/var/run/nginx.pid

RETVAL=0

prog="nginx"

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0

[ -x $nginxd ] || exit 0

# Start nginx daemons functions.

start() {

if [ -e $nginx_pid ];then

echo "nginx already running...."

exit 1

fi

echo -n $"Starting $prog: "

daemon $nginxd -c ${nginx_config}

RETVAL=$?

echo

[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx

return $RETVAL

}

# Stop nginx daemons functions.

stop() {

echo -n $"Stopping $prog: "

killproc $nginxd

RETVAL=$?

echo

[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid

}

# reload nginx service functions.

reload() {

echo -n $"Reloading $prog: "

#kill -HUP `cat ${nginx_pid}`

killproc $nginxd -HUP

RETVAL=$?

echo

}

# See how we were called.

case "$1" in

start)

start

;;

stop)

stop

;;

reload)

reload

;;

restart)

stop

start

;;

status)

status $prog

RETVAL=$?

;;

*)

echo $"Usage: $prog {start|stop|restart|reload|status|help}"

exit 1

esac

exit $RETVAL

使用Nginx代理ftpuser目录

1.到 nginx的配置文件中 将位置改为 ftpuser的目录

cd /usr/local/nginx/conf

vim nginx.conf

/代表nginx的根目录

root 表示是那个文件夹

index 是那个页面

location / {

root /home/ftpuser;

}

将location中的内容改为 root ftpuser的目录

然后重启 nginx

cd ../sbin

./nginx -s quit 先关闭在打开

./nginx

使用http://192.168.160.131 报403则修改成功

403(权限不足)nginx没有访问ftpuser目的权限

进入 nginx.conf 给与权限

在 nginx.conf 文件前添加 user ftpuser

给 nginx ftpuser的权限

给完权限再次访问发现还是403,这是因为没有指定显示的文件

location / {

root /home/ftpuser;

index 1.jpg

}

使用./nginx -s reload 重启

再次访问即可

查看应用进程号

ps aux|grep nginx(应用名)

相关推荐

迷你鹦鹉鱼可以和什么鱼混养?
mobile365体育投注备用

迷你鹦鹉鱼可以和什么鱼混养?

📅 07-12 👁️ 4575
谢谢别人原谅我的句子(精选220句)
bt365备用网站

谢谢别人原谅我的句子(精选220句)

📅 07-01 👁️ 4553
软件的研发状态有哪些种类
bt365备用网站

软件的研发状态有哪些种类

📅 07-27 👁️ 5178
计算机主机显卡装在哪,电脑显卡在主板上的哪个位置?怎么查看显卡的信息和更新驱动程序?...
苹果手机设置详解:从初次开机到个性化定制全攻略!
mobile365体育投注备用

苹果手机设置详解:从初次开机到个性化定制全攻略!

📅 06-27 👁️ 9961
骤的解释
bt365备用网站

骤的解释

📅 08-02 👁️ 3226