Code前端首页关于Code前端联系我们

袁一峰实用教程如何创建Nginx容器以及如何添加SSL证书

terry 2年前 (2023-09-28) 阅读数 55 #未命名

院一峰搭建 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欢迎页面。

    院一峰搭建 Nginx 容器过程及如何加入 SSL 证书实操教程

    然后,折磨容器。由于--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。配置目录映射

    重新启动新容器。这次不仅映射了网页目录,还映射了配置目录。上面的代码, - 卷“$PWD”:/etc/wait目录目录 /etc/wait本地conf子目录。

    使用浏览器访问127.0.0.2:8080。如果可以看到该网页,则说明本地配置已应用。此时,容器就可以停止了。

    
    $ docker container stop mynginx
    

    5。自签名证书

    现在要为容器添加HTTPS支持,首先是创建私钥和证书。正式证书需要证书颁发机构 (CA) 的签名。出于测试目的,请获取自签名证书。

    下面,我看一下DigitalOcean的教程。首先,确保您的计算机安装了 OpenSSL,然后运行以下命令。

    
    $ 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

    执行后,命令行中会出现很多问题供你回答,比如你的国家、你的电子邮件等。

    院一峰搭建 Nginx 容器过程及如何加入 SSL 证书实操教程

    最重要的问题是通用名称。一般情况下需要填写域名。这里可以填写127.0.0.2。

    
    Common Name (e.g. server FQDN or YOUR name) []:127.0.0.2
    

    回答完问题后,当前目录下应该多了两个文件:example.keyexample.crt。在

    conf目录下新建子目录certs,将这两个文件放入该子目录中。

    
    $ mkdir conf/certs
    $ mv example.crt example.key conf/certs
    

    6。配置HTTPS

    使用您的私钥和证书,您可以开启HTTPS Nginx。

    首先打开文件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;
        }
    }
    

    接下来,启动一个新的 Nginx 容器。

    
    $ 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
    

    上面的命令中,不仅映射了容器的80端口,还映射了443端口,这是HTTPS的特殊端口。

    打开浏览器并转到https://127.0.0.2:8081/。由于使用的是自签名证书,浏览器会提示不安全。忽略它,选择继续访问,你应该可以看到Hello World。

    此时Nginx容器的HTTPS支持已经准备就绪。有了这个容器,在下一篇文章中,我将测试HTTP/2服务器推送功能。

    7。参考链接

    • 使用 docker 部署 nginx(官方镜像)的技巧,作者:Mario Ponticello
    • 如何在 Ubuntu 14.04 上的 Docker 容器中运行 Nginx,作者:Thomas Taege
    • 官方 Docker 库文档,作者:Docker 库如何在 Ubuntu 16.04 上为 Nginx 自签名 SSL 证书,作者:Justin Ellingwood

    版权声明

    本文仅代表作者观点,不代表Code前端网立场。
    本文系作者Code前端网发表,如需转载,请注明页面地址。

    热门