如何使用Nginx Docker容器中的Https下载文件
作为系统管理员,我们有时需要在服务器之间安全地下载大型文件,例如备份文件,数据库备份,电子邮件,日志文件等。
通常,我们为此目的使用SFTP,SSH或者SCP。
但是,在进行远程备份下载时,这些过程相对较慢。
在本文中,我将说明在Ubuntu 16.04服务器中借助Nginx Docker容器使用HTTP下载大文件的便捷方法。
为主机名创建SSL证书
首先,让我们获取我们的主机名的SSL证书。
我正在使用“Let’s Encrypt ”来获取我的免费SSL证书。
我们可以使用GitHub存储库安装Let's Encrypt。
安装Git和BC
在安装“Let’s Encrypt ”之前,需要安装其中两个软件包。
BC是“任意精度语言计算器”。
它用于Let's Encrypt软件中的自动更新脚本。
我们可以使用以下命令安装这些软件包:
root@www:~# apt-get update root@www:~# apt-get -y install git bc
完成后,我们可以通过从GitHub克隆存储库轻松下载加密文件。
克隆Let’s Encrypt 存储库
我们可以使用此命令将“加密”存储库克隆到/opt文件夹。
root@www:~# git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt Cloning into '/opt/letsencrypt'... remote: Counting objects: 39435, done. remote: Total 39435 (delta 0), reused 0 (delta 0), pack-reused 39435 Receiving objects: 100% (39435/39435), 10.63 MiB | 20.39 MiB/s, done. Resolving deltas: 100% (28067/28067), done. Checking connectivity... done.
通过克隆,我们将在/opt/letsencrypt目录中拥有let加密存储库的副本。
颁发SSL证书
Let’s Encrypt 提供了多种通过各种插件获取SSL证书的方法。
我们正在使用Webroot插件初始化我们的证书过程。
它称为身份验证器插件。
通过在文件根目录的/.well-known目录中放置一个特殊文件来工作,该文件可以通过Let's Encrypt服务通过Web服务器打开以进行验证。
让我们看看如何使用Webroot插件获取SSL证书。
如果尚未安装Web服务器,则可以使用apt-get install nginx命令在Docker主机中安装Nginx。
现在,将以下部分添加到默认虚拟主机配置/etc/nginx/sites-available/default中的SSL服务器块中,以允许访问.well-known目录进行验证。
location ~ /.well-known { allow all; }
在Let's Encrypt颁发SSL证书期间,该文件夹将在域文档根目录下创建。
现在保存文件并重新加载Nginx配置。
现在,我们可以使用Webroot插件通过这些命令来请求我们的SSL证书。
我们可以使用带有-d选项的这些命令来指定我们的域名。
要对多个域使用单个证书,我们可以使用-d选项同时包含所有证书,如下所示:
root@www:~# cd /opt/letsencrypt root@www:/opt/letsencrypt# ./letsencrypt-auto certonly -a webroot --webroot-path=/var/www/html -d nodenixbox.com -d www.nodenixbox.com
我们需要移至/opt处的letsencrypt repo文件夹,然后从此处运行此命令。
该命令将继续安装所需的Python软件包,并提示我们输入电子邮件地址,以用于紧急通知和丢失的密钥恢复。
输入有效电子邮件地址,然后转到下一个屏幕,以同意该软件的条款和条件。
同意这些订户协议后,安装将成功完成,并将为我们提供证书详细信息。
我们可以从中查看我们的域证书的证书详细信息和到期日期。
证书和链条已保存在
/etc/letsencrypt/live/nodenixbox.com/fullchain.pem。
证书将
将于2015-11-05到期。
我们可以编辑默认的Nginx配置,以包括用于启用SSL的这些证书详细信息,并重新加载配置以更新这些更改。
server { # SSL configuration #listen 443 ssl default_server; listen [::]:443 ssl default_server; server_name nodenixbox.com www.nodenixbox.com; root /var/www/html/; ssl_certificate /etc/letsencrypt/live/nodenixbox.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/nodenixbox.com/privkey.pem;
我们可以通过以下网址验证SSL安装:https://www.sslshopper.com/ssl-checker.html
定义下载路径
当在/downloads/url上发出请求时,我们需要在SSL服务器块下的Nginx Vhost配置中添加以下条目,以提供文件。
location /downloads/{ alias /files/; }
创建Nginx Docker容器
让我们使用来自docker主机的安全Nginx配置以及加密安装和证书来创建Nginx docker容器。
首先,创建一个docker-compose.yml文件。
该文件告诉docker如何运行特定的容器。
files : This folder contains the files which needs to be downloaded conf : This folder contains our saved secured Nginx configuration /etc/letsencrypt & /opt/letsencrypt contains our certificate details and letsencrypt scripts. /var/www/: contains our domain document roots.
PS:根据我们的方便,我们可以排除不希望复制的卷。
此外,它将docker容器的端口80和443分别暴露给主机的端口8081和8080。
上面的文件告诉docker使用nginx:latest镜像运行一个容器,从主机上挂载目录文件和conf,并公开端口。
现在,我们可以运行此命令来构成我们的docker容器。
root@www:~# docker-compose up Recreating root_nginx_1 Attaching to root_nginx_1
这将在我们合成后创建一个docker容器并使它运行。
我们可以在下面查看我们的docker容器状态:
root@www:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a710ab1cdaa9 nginx:latest "nginx -g 'daemon off" About an hour ago Up About an hour 0.0.0.0:8081->80/tcp, 0.0.0.0:8080->443/tcp root_nginx_1
我们可以通过调用此URL >> https://nodenix.com:8080或者在SSL检查器中来验证Docker容器的Nginx安全安装。
安全下载文件
组成后,需要下载的文件位于docker容器中的文件夹/files内。
root@www:~# docker exec -i -t a710ab1cdaa9 /bin/bash root@a710ab1cdaa9:/files# ls -l total 8 -rw-r--r-- 1 root root 172 Aug 8 07:39 log.tar.gz -rw-r--r-- 1 root root 110 Aug 8 07:32 mails.tar.gz
现在,我们可以使用我们的Nginx docker从URL >>> https://nodenixbox.com:8080/downloads/mails.tar.gz轻松安全地下载此文件。