袁一峰实用教程如何创建Nginx容器以及如何添加SSL证书
以下是创建Nginx容器以及如何添加SSL证书的过程。你将能够看到Docker测试软件的新功能,非常方便,值得学习。如果你还不了解 Docker,可以先阅读《Docker 入门教程》。非常简单,半个小时就能学会。
1。 HTTP服务
Nginx最大的作用就是构建一个Web Server。使用容器,只需一个命令行即可设置服务器,并且不需要任何配置。
$ docker container run \
-d \
-p 127.0.0.2:8080:80 \
--rm \
--name mynginx \
nginx
上面的命令下载并运行官方的Nginx镜像。默认是最新(最新)版本,目前是1.13.9。如果本机已经安装了以前的版本,请删除并重新安装,因为只有1.13.9支持服务器推送。
上面命令中各个参数的含义如下。 ? :容器停止运行后,容器文件自动删除
--name:容器的名称为mynginx。如果没有错误,您可以打开浏览器访问127.0.0.2:8080。正常情况下会显示Nginx欢迎页面。
然后,折磨容器。由于--rm参数,容器文件将被自动删除。
$ docker container stop mynginx
2。网页目录映射
网页文件都在容器中,无法直接编辑,这显然很不方便。下一步是在本地映射网页文件所在的目录/usr/share/nginx/html。
首先新建一个目录并进入。
$ mkdir nginx-docker-demo
$ cd nginx-docker-demo
然后创建一个新的html子目录。
$ mkdir html
在此子目录中,放入包含以下内容的文件index.html。
<h1>Hello World</h1>
然后可以将这个子目录html映射到容器网页文件目录/usr/share/nginx/html。
$ docker container run \
-d \
-p 127.0.0.2:8080:80 \
--rm \
--name mynginx \
--volume "$PWD/html":/usr/share/nginx/html \
nginx
打开浏览器并转到127.0.0.2:8080。您应该能够看到 Hello World。
3。复制配置
编辑网页文件还不够,还必须编辑Nginx配置文件,否则后面将无法添加SSL支持。
首先将容器中的Nginx配置文件复制到本地计算机。
$ docker container cp mynginx:/etc/nginx .
以上命令的意思是从mynginx容器中复制/etc/nginx到当前目录。不要错过最后一张。执行完
后,当前目录下应该会多出一个nginx子目录。然后,将此子目录重命名为conf。
$ mv nginx conf
现在可以关闭容器了。
$ docker container stop mynginx
4。配置目录映射
重新启动新容器。这次不仅映射了网页目录,还映射了配置目录。上面的代码, 使用浏览器访问127.0.0.2:8080。如果可以看到该网页,则说明本地配置已应用。此时,容器就可以停止了。 现在要为容器添加HTTPS支持,首先是创建私钥和证书。正式证书需要证书颁发机构 (CA) 的签名。出于测试目的,请获取自签名证书。 下面,我看一下DigitalOcean的教程。首先,确保您的计算机安装了 OpenSSL,然后运行以下命令。 上述命令各参数含义如下。 执行后,命令行中会出现很多问题供你回答,比如你的国家、你的电子邮件等。 最重要的问题是通用名称。一般情况下需要填写域名。这里可以填写127.0.0.2。 回答完问题后,当前目录下应该多了两个文件: 使用您的私钥和证书,您可以开启HTTPS Nginx。 首先打开文件 接下来,启动一个新的 Nginx 容器。 上面的命令中,不仅映射了容器的80端口,还映射了443端口,这是HTTPS的特殊端口。 打开浏览器并转到https://127.0.0.2:8081/。由于使用的是自签名证书,浏览器会提示不安全。忽略它,选择继续访问,你应该可以看到Hello World。 此时Nginx容器的HTTPS支持已经准备就绪。有了这个容器,在下一篇文章中,我将测试HTTP/2服务器推送功能。 - 卷“$PWD”:/etc/wait目录目录 /etc/wait本地conf子目录。
$ docker container stop mynginx
5。自签名证书
$ sudo openssl req \
-x509 \
-nodes \
-days 365 \
-newkey rsa:2048 \
-keyout example.key \
-out example.crt
req:处理证书签名请求。 -x509:创建自签名证书。 -nodes:跳过为证书设置密码的步骤,以便Nginx可以直接打开证书。 -天365:证书有效期为一年。 -newkey rsa:2048:创建一个新的私钥,使用的算法是RSA 2048位。 -keyout:新创建的私钥文件为当前目录下的example.key。 -out:新创建的证书文件为当前目录下的example.crt。
Common Name (e.g. server FQDN or YOUR name) []:127.0.0.2
example.key和example.crt。在conf目录下新建子目录certs,将这两个文件放入该子目录中。
$ mkdir conf/certs
$ mv example.crt example.key conf/certs
6。配置HTTPS
conf/conf.d/default.conf,在最后添加配置。
server {
listen 443 ssl http2;
server_name localhost;
ssl on;
ssl_certificate /etc/nginx/certs/example.crt;
ssl_certificate_key /etc/nginx/certs/example.key;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
$ docker container run \
--rm \
--name mynginx \
--volume "$PWD/html":/usr/share/nginx/html \
--volume "$PWD/conf":/etc/nginx \
-p 127.0.0.2:8080:80 \
-p 127.0.0.2:8081:443 \
-d \
nginx
7。参考链接
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网