Docker搭建Nginx图片服务器的方法

Docker搭建Nginx图片服务器的方法,第1张

Docker搭建Nginx图片服务器的方法

本文主要介绍Docker搭建Nginx镜像服务器的方法,非常详细的为大家介绍,对大家的学习或者工作有一定的参考价值。有需要的朋友可以参考一下。

简介

一般在开发中,图片上传到一个目录,然后将目录和文件名进行拼接,存储到数据库中。但是,这种方法如果做得不好,可能会有一些缺陷。

如果项目搬迁,即使服务器本身还在使用,服务器中存储的与项目相关的图片也会搬迁,同时修改代码,这样会带来更多的麻烦。如果你设置了一个专门存储图片的服务器,并通过ftp传输,你的代码就不需要修改了。

Docker和Nginx的介绍和优势这里就不展开了,网上的博客和教程也很多。

环境建设

环境的某些模块可能不够详细。如果想了解更多,可以查其他资料。下面只是一个简单的 *** 作。

1.安装Docker

yum安装docker

2.拉动Nginx镜子

码头工人拉nginx:1.16.0

1.16.0是版本号,可以通过docker搜索nginx查询图片;拿其他图片比如tomcat,mysql等等。

3.创建docker安装的主文件。

mkdir-p/home/nginx/www/home/nginx/logs/home/nginx/conf

4.创建并运行Nginx容器

dockerrun-d-p80:80-p443:443--namenginx-server-v/home/nginx/www:/usr/share/nginx/html -v/home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf-v/home/nginx/logs:/var/log/nginxnginx

5.在主机上创建Nginx的配置文件。

在/home/nginx/conf中创建一个新文件nginx.conf,并编写以下配置:

userroot; worker_processes1; error_log/var/log/nginx/error.logwarn; pid/var/run/nginx.pid; events{ worker_connections1024; } http{ include/etc/nginx/mime.types; default_typeapplication/octet-stream; log_formatmain'$remote_addr-$remote_user[$time_local]"$request"' '$status$body_bytes_sent"$http_referer"' '"$http_user_agent""$http_x_forwarded_for"'; access_log/var/log/nginx/access.logmain; sendfileon; #tcp_nopushon; keepalive_timeout65; #gzipon; include/etc/nginx/conf.d/*.conf; server{ listen443ssl; server_name你的ip地址或域名; root/usr/share/nginx/html; ssl_certificate你的密钥.pem; ssl_certificate_key你的密钥.key; ssl_session_timeout5m; ssl_session_cacheshared:SSL:1m; ssl_ciphersECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:aNULL:!MD5:!ADH:!RC4; ssl_protocolsTLSv1TLSv1.1TLSv1.2; ssl_prefer_server_cipherson; #跳转到8080端口,即我的tomcat容器,如果浏览器输入https://ip/则跳转到tomcat容器(已经运行并映射端口号) location/{ root/usr/share/nginx/html; proxy_passhttp://ip:8080/; indexindex.htmlindex.htm; }      #如果浏览器输入https://ip/images/则对应宿主机上的/home/nginx/www/images/因为前面已经挂载了,即宿主机某个目录和docker容器内的某个文件夹共享数据      #要先在宿主机的/home/nginx/www/中创建images目录 location~/images/{ root/usr/share/nginx/html/; } } server{ listen80; server_name你的ip地址或域名; rewrite^https://$host$1permanent; } }

还有ssl的配置。你需要先申请一个域名,然后获取一个ssl证书,再进行配置。这里就不详细介绍了。

环境的配置几乎已经完成。接下来,安装vsftpd来构建ftp。

设置FTP

安装vsftpd

yum-y安装vsftpd

添加用户

用户添加自定义用户名

Passwd自定义密码

修改配置文件

vi/etc/vsftpd/vsftpd.conf

修改如下:

#默认配置文件是YES,表示支持匿名访问,设置为
anonymous_enable=no
#在末尾加上这两行 pasv_min_port=30000[/]

保存后设置用户访问权限。

chownFTPadmin/home/nginx/www/image
chmod777-R/home/nginx/www/image

事后测试一波,通过ftp上传后,通过浏览器的https请求得到以下结果:

*补充一点:记得给阿里云服务器配置安全组,开放端口21,端口443和80,端口30000-30009。

用Java实现FTP传输

首先,在Resource中创建ftpResource.properties文件,并编写参数。

FTP_ADDRESS=您的IP
FTP_port=21
FTP_username=username
FTP_PASSWORD=用户密码
FTP

然后写一个FTP传输的工具类。

importorg.apache.commons.net.ftp.FTP; importorg.apache.commons.net.ftp.FTPClient; importorg.springframework.beans.factory.annotation.Value; importorg.springframework.context.annotation.PropertySource; importorg.springframework.stereotype.Component; importjava.io.*; /** *@authorMax */ @Component @PropertySource("classpath:ftpResource.properties") publicclassFtpUtil{ /** *FTP_ADDRESS:ftp服务器ip地址 *FTP_PORT:ftp服务器port,默认是21 *FTP_USERNAME:ftp服务器用户名 *FTP_PASSWORD:ftp服务器密码 *FTP_BASE_PATH:ftp服务器存储图片的绝对路径 *IMAGE_BASE_URL:ftp服务器外网访问图片路径 */ @Value("${FTP_ADDRESS}") privateStringFTP_ADDRESS; @Value("${FTP_PORT}") privateIntegerFTP_PORT; @Value("${FTP_USERNAME}") privateStringFTP_USERNAME; @Value("${FTP_PASSWORD}") privateStringFTP_PASSWORD; @Value("${FTP_BASE_PATH}") privateStringFTP_BASE_PATH; @Value("${IMAGE_BASE_URL}") privateStringIMAGE_BASE_URL; /** *上传图片 *@paraminputStream输入流 *@paramname文件名 *@return图片url *@throwsIOExceptionIO异常 */ publicStringuploadImage(InputStreaminputStream,Stringname)throwsIOException{ FTPClientftpClient=newFTPClient(); try{ System.out.println(FTP_ADDRESS); ftpClient.enterLocalPassiveMode(); ftpClient.connect(FTP_ADDRESS,FTP_PORT); ftpClient.login(FTP_USERNAME,FTP_PASSWORD); ftpClient.changeWorkingDirectory(FTP_BASE_PATH); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); booleanisSucceed=ftpClient.storeFile(name,inputStream); if(isSucceed){ returnIMAGE_BASE_URL+name; } }catch(Exceptione){ e.printStackTrace(); }finally{ ftpClient.logout(); } returnIMAGE_BASE_URL+"error"; } }

然后在服务处理逻辑中,这里只显示了部分代码。

@Autowired privateFtpUtilftpUtil; @Override publicintinsertImg(MultipartFilefile)throwsIOException{ /* 1、获取上传的文件流inputStream以及文件名getOriginalFilename 2、调用FtpUtil中的函数,将图片上传到图片服务器并返回https地址 3、若返回的是图片地址,则将其插入数据库 */ InputStreaminputStream=file.getInputStream(); Stringfilename=file.getOriginalFilename(); StringpicUrl=ftpUtil.uploadImage(inputStream,filename); }

就是这样。客户端请求后,通过FTP传输到服务器,然后将地址保存到数据库中。前端只要得到图片网址,就会显示出来。

摘要

关于Docker构建Nginx镜像服务器的这篇文章到此为止。关于DockerbuildingNginximageserver的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zz/774569.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存