您的位置:首页 > 运维架构 > Nginx

Nginx搭建图片服务器

2018-02-08 11:22 281 查看

1 业务场景说明

搭建图片服务器,一个是解决集群应用中用户图片资源分散不利于管理的问题,数据同步比较麻烦,同时可以利用Nginx起到动静分离的效果,最终达到分流作用降低应用服务器的压力。
技术说明:
1) 利用服务器的FTP服务或者SFTP服务进行图片管理(主要是存储图片)。(linux下的vsftp服务及sshd服务)
2) 利用Nginx的HTTP服务器功能,进行动静分离操作。

2 Nignx安装

详细安装过程参照:
http://blog.csdn.net/zwx521515/article/details/79286751

3 安装vsftpd组件

3.1 什么是vsftpd?

vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。

3.2 特点

1) vsftpd 是以一般身份启动服务,所以对于 Linux 系统的使用权限较低,对于Linux 系统的危害就相对的减低了。此外, vsftpd 亦利用 chroot() 这个函式进行改换根目录的动作,使得系统工具不会被vsftpd 这支服务所误用;
2) 任何需要具有较高执行权限的 vsftpd 指令均以一支特殊的上层程序( parent process ) 所控制 ,该上层程序享有的较高执行权限功能已经被限制的相当的低,并以不影响Linux 本身的系统为准;
3) 所有来自 clients 端,想要使用这支上层程序所提供的较高执行权限之vsftpd 指令的需求,均被视为『不可信任的要求』来处理,必需要经过相当程度的身份确认后,方可利用该上层程序的功能。例如chown(), Login 的要求等等动作;
4) 此外,上面提到的上层程序中,依然使用 chroot() 的功能来限制使用者的执行权限。
5) 备注:sftp服务配置参照如下教程:
http://blog.csdn.net/zwx521515/article/details/79286588

3.3 安装

通过命令安装vsftpd组件,命令如下:yum -y install vsftpd






安装成功后,可以在/etc/vsftpd/目录下产生对应的配置文件信息。如下图所示:



3.4 FTP用户配置

3.4.1 添加一个ftp用户

此用户就是用来登录ftp服务器用的。这样一个用户建完,可以用这个登录,记得用普通登录不要用匿名了。登录后默认的路径为 /home/ftpuser。
执行用户添加命令:useradd ftpuser

3.4.2 给ftp用户添加密码

输入两次密码后修改密码。命令:passwd ftpuser



3.5 防火墙开启21端口

因为ftp默认的端口为21,而centos默认是没有开启的,所以要修改iptables文件。命令: vi /etc/sysconfig/iptables



重启iptables服务,命令:service iptables restart



3.6 关闭匿名访问

修改/etc/vsftpd/vsftpd.conf找到anonymous_enable=YES并将其修改为anonymous_enable=NO。命令如下:vi /etc/vsftpd/vsftpd.conf



3.7 修改selinux

启动ftp服务,命令:service vsftpd start后通过Filezilla访问上去了,可是发现没法返回目录(使用ftp的主动模式,被动模式还是无法访问),也上传不了,因为selinux作怪了。 错误如下:



修改selinux,执行如下命令查看状态:getsebool -a | grep ftp



修改状态,命令:
权限设置:setsebool -P ftpd_full_access on
目录设置:setsebool -P ftp_home_dir on



重启服务ftp服务,命令: service vsftpd restart



通过FTP工具Filezilla重新连接(主动模式),连接成功。如下图:



3.8 开启被动模式

默认是开启的,但是要指定一个端口范围,打开vsftpd.conf文件,在后面加上如下两行配置:
pasv_min_port=30000
pasv_max_port=30999
修改/etc/vsftpd/vsftpd.conf文件,命令:vi /etc/vsftpd/vsftpd.conf
表示端口范围为30000~30999,这个可以随意改。改完重启一下vsftpd 
由于指定这段端口范围,iptables也要相应的开启这个范围,所以像上面那样打开iptables文件。 也是在21上下面另起一行,更那行差不多,只是把21 改为30000:30999,然后:x保存,重启下iptables。这样就搞定了。



修改/etc/sysconfig/iptables文件,命令vi /etc/sysconfig/iptables



重启ftp服务,命令:servie vsftpd restarat
重启iptables服务,命令:service iptables restart



通过FTP工具Filezilla以被动方式连接,成功。如下图所示:



被动模式连接成功:



3.9 将vsftpd服务设置为开机自启动

命令:chkconfig vsftpd on

4 文件准备

在FTP用户ftpuser根目录下/home/ftpuser/下创建子目录upload,然后再在upload目录下创建images目录用于存储图片信息。目录结果如下:



5 Nignx配置

例如:图片通过ftp服务上传到/home/ftpuser/upload/images目录下,我想通过访问Nginx服务器来访问ftp目录下的图片文件,该url为http://192.168.11.198/images/xxx.jpg。即使用http请求访问原本需要使用ftp请求才能访问到的资源文件。具体的操作过程如下:

5.1 修改nginx.conf配置文件

修改/usr/local/nginx/conf/nginx.conf在默认的server里再添加一个location并指定实际路径:
命令及配置如下:
命令:vi /usr/local/nginx/conf/nginx.conf
配置:location /images/ {
root /home/ftpuser/upload/;#指向ftp文件存储目录
autoindex on;
}
或者
location / {
root /home/ftpuser/upload/images/;
autoindex on;
}

5.2 重启nginx

重启nginx服务命令:./sbin/nginx –s reload



5.3 服务验证

重启完nginx服务后,请求地址http://192.168.11.198/images/timg1.jpg
报403拒绝访问异常如下图所示:



5.4 问题处理

原因是目录权限问题。解决方式如下:
修改目录所属权限命令(正常不用修改):
chown ftpuser /home/ftpuser
修改ftp用户对该目录的操作权限(正常读写权限即可):
chmod 777 -R /home/ftpuser



再次访问成功,如下图:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: