广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >怎么为docker中的nginx配置https
  • 521
分享到

怎么为docker中的nginx配置https

2024-04-02 19:04:59 521人浏览 泡泡鱼
摘要

这篇文章主要讲解了“怎么为Docker中的Nginx配置https”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么为docker中的nginx配置Http

这篇文章主要讲解了“怎么为Docker中的Nginx配置https”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么为docker中的nginx配置Https”吧!

没有 https 加持的网站会逐渐地被浏览器标记为不安全的,所以为网站添加 https 已经变得刻不容缓。对于商业网站来说,花钱购买 ssl/tls 证书并不是什么问题。但对于个人用户来说,如果能有免费的 ssl/tls 证书可用将会是非常幸福的事情!let's encrypt 就是一个提供免费 ssl/tls 证书的网站,由于其证书期限只有三个月,所以需要我们用自动化的方式去更新证书。本文将介绍如何为通过 docker 运行的 nginx 中的站点添加 https 支持,并自动完成证书的更新。本文的演示环境为:运行在 Azure 上的 ubuntu 16.04 主机:

怎么为docker中的nginx配置https

准备环境

在 azure 上创建 ubuntu 类型的虚机事件非常容易的事情,安装 docker 也无须赘言。比较容易忽略的是配置合适的网络安全组规则,比如打开 80 和 443 端口:

怎么为docker中的nginx配置https

还有就是配置 dns:

怎么为docker中的nginx配置https

创建一个普通的 http 站点

简单起见,直接使用一个镜像中的 nodejs 应用作为 WEB 站点:

$ docker pull ljfpower/nodedemo
$ docker network create -d bridge webnet
$ docker run -d --restart=always --expose=3000 \
   --network=webnet --name=myweb \
   ljfpower/nodedemo

在用户的家目录下创建 nginx 目录及其子目录 conf.d、conf.crt 和 html,创建 logs 目录及其子目录 nginx 和 letsencrypt:

$ mkdir -p nginx/{conf.d,conf.crt,html}
$ mkdir -p logs/{nginx,letsencrypt}

说明,本文演示的示例中需要我们手动创建的文件和目录结构如下:

怎么为docker中的nginx配置https

创建 nginx/nginx.conf 文件,内容如下:

user nginx;
worker_processes auto;

error_log /var/log/nginx/error.log warn;
pid  /var/run/nginx.pid;

events {
 worker_connections 2048;
}

http {
 include  /etc/nginx/mime.types;
 default_type application/octet-stream;

 sendfile  on;
 keepalive_timeout 65;
 client_max_body_size 10m;

 include /etc/nginx/conf.d/*.conf;
}

然后创建 nginx/conf.d/default.conf 文件,内容如下:

upstream web{
 server myweb:3000;
}
server {
 listen  80;
 listen  [::]:80;
 server_name filterinto.com www.filterinto.com;

 location ^~ /.well-known/acme-challenge/ {
  default_type "text/plain";
  root /usr/share/nginx/html;
 }
 location = /.well-known/acme-challenge/ {
  return 404;
 }
 location / {
  proxy_pass http://web;
 }
}

其中 /.well-known/acme-challenge/ 目录是 certbot 工具在生成证书时创建的。接下来创建文件 nginx/html/index.html 文件,内容如下:

<!doctype html>
<html>
<head>
 <meta charset="utf-8" />
 <title>let's encrypt first time cert issue site</title>
</head>
<body>
 <h1>hello https!</h1>
 <p>
  just used for the very first time ssl certificates are issued by let's encrypt's
  certbot.
 </p>
</body>
</html>

这个页面也是 certbot 在生成证书时需要用到的。最后让我们启动容器(在用户的家目录下执行下面的命令):

$ docker run -d \
 -p 80:80 \
 -v $(pwd)/nginx/conf.d:/etc/nginx/conf.d:ro \
 -v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
 -v $(pwd)/logs/nginx:/var/log/nginx \
 -v $(pwd)/nginx/html:/usr/share/nginx/html \
 --restart=always \
 --name=gateway \
 --network=webnet \
 nginx:1.14

注意:这时没有映射 443 端口,也没有挂载存放证书的目录。只能以 http 协议访问访问我们的站点:

怎么为docker中的nginx配置https

为站点生成 ssl/tls 证书

let's encrypt 是一个提供免费 ssl/tls 证书的网站,它为用户提供了 certbot 工具用来生成 ssl/tls 证书。方便起见,我们把 certbot 简单的封装到容器中。在用户的家目录下创建 certbot 目录,进入 certbot 目录并把下面的内容保存到 dockerfile 文件中:

from alpine:3.4
run apk add --update bash certbot
volume ["/etc/letsencrypt"]

然后执行下面的命令创建 certbot 镜像:

$ docker build -t certbot:1.0 .

然后在 certbot 目录下创建自动更新证书的脚本 renew_cert.sh,内容如下:

#!/bin/bash
webdir="$1"
list=('filterinto.com' 'www.filterinto.com')
led_list=()
www_root=/usr/share/nginx/html
for domain in ${list[@]};do
 docker run \
  --rm \
  -v ${webdir}/nginx/conf.crt:/etc/letsencrypt \
  -v ${webdir}/logs/letsencrypt:/var/log/letsencrypt \
  -v ${webdir}/nginx/html:${www_root} \
  certbot:1.0 \
  certbot certonly --verbose --noninteractive --quiet --agree-tos \
  --webroot -w ${www_root} \
  --email="nick.li@grapecity.com" \
  -d "$domain"
 code=$?
 if [ $code -ne 0 ]; then
  failed_list+=($domain)
 fi
done

# output failed domains
if [ ${#failed_list[@]} -ne 0 ];then
 echo 'failed domain:'
 for (( i=0; i<${#failed_list[@]}; i++ ));
 do
  echo ${failed_list[$i]}
 done
fi

在用户的家目录中执行 ./renew_cert.sh /home/nick 命令就可以生成新的证书(/home/nick 为当前用户的家目录)。生成的证书被保存在 /home/nick/nginx/conf.crt/live 目录下,以域名命名的目录下保存着该域名的证书:

怎么为docker中的nginx配置https

然后去检查下 nginx/html 目录,发现多了一个隐藏的 .well-known 目录,这个目录就是在生成证书时创建的:

怎么为docker中的nginx配置https

有了 ssl/tls 证书,接下来我们就可以配置 https 站点了。

为站点配置 ssl/tls 证书

有了 ssl/tls 证书,接下来更新 nginx 的配置文件就可以了,更新 nginx/conf.d/default.conf 的内容如下:

upstream web{
 server myweb:3000;
}

server {
 listen  80;
 listen  [::]:80;
 server_name filterinto.com www.filterinto.com;

 location ^~ /.well-known/acme-challenge/ {
  default_type "text/plain";
  root /usr/share/nginx/html;
 }
 location = /.well-known/acme-challenge/ {
  return 404;
 }
 return 301 https://$server_name$request_uri;
}
server {
 listen  443;
 listen  [::]:443;
 server_name filterinto.com;

 # enable ssl
 ssl      on;
 ssl_protocols tlsv1 tlsv1.1 tlsv1.2;
 ssl_prefer_server_ciphers on;
 ssl_ciphers    "eecdh+ecdsa+aesGCm eecdh+arsa+aesgcm eecdh+ecdsa+sha384 eecdh+ecdsa+sha256 eecdh+arsa+sha384 eecdh+arsa+sha256 eecdh edh+arsa !anull !enull !low !3Des !md5 !exp !psk !srp !dss !rc4";

 # config ssl certificate
 ssl_certificate   conf.crt/live/filterinto.com/fullchain.pem;
 ssl_certificate_key  conf.crt/live/filterinto.com/privkey.pem;

 location ^~ /.well-known/acme-challenge/ {
  default_type "text/plain";
  root /usr/share/nginx/html;
 }
 location = /.well-known/acme-challenge/ {
   return 404;
 }
 location / {
  proxy_pass http://web;
 }
}
server {
 listen  443;
 listen  [::]:443;
 server_name www.filterinto.com;

 # enable ssl
 ssl      on;
 ssl_protocols tlsv1 tlsv1.1 tlsv1.2;
 ssl_prefer_server_ciphers on;
 ssl_ciphers    "eecdh+ecdsa+aesgcm eecdh+arsa+aesgcm eecdh+ecdsa+sha384 eecdh+ecdsa+sha256 eecdh+arsa+sha384 eecdh+arsa+sha256 eecdh edh+arsa !anull !enull !low !3des !md5 !exp !psk !srp !dss !rc4";

 # config ssl certificate
 ssl_certificate   conf.crt/live/www.filterinto.com/fullchain.pem;
 ssl_certificate_key  conf.crt/live/www.filterinto.com/privkey.pem;

 location ^~ /.well-known/acme-challenge/ {
  default_type "text/plain";
  root /usr/share/nginx/html;
 }
 location = /.well-known/acme-challenge/ {
   return 404;
 }
 location / {
  proxy_pass http://web;
 }
}

然后删除容器 gateway 并用下面的脚本重新创建:

$ docker run -d \
 -p 80:80 \
 -p 443:443 \
 -v $(pwd)/nginx/conf.d:/etc/nginx/conf.d:ro \
 -v $(pwd)/nginx/conf.crt:/etc/nginx/conf.crt:ro \
 -v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
 -v $(pwd)/logs/nginx:/var/log/nginx \
 -v $(pwd)/nginx/html:/usr/share/nginx/html \
 --restart=always \
 --name=gateway \
 --network=webnet \
 nginx:1.14

现在就只能通过 https 来访问站点了:

怎么为docker中的nginx配置https

自动更新证书

let's encrypt 提供的 ssl/tls 证书期限只有三个月,每过三个月要手动更新一次证书也够呛的,下面我们介绍自动更新证书的方法。

其实我们的配置已经为自动化更新证书提供了最大的便利(其实是使用 docker 带来的便利),在定时任务中添加下面两条记录就可以了:

0 0 1 * * /home/nick/certbot/renew_cert.sh /home/nick >> /home/nick/logs/cert.log 2>> /home/nick/logs/cert.error.log
0 1 1 * * docker exec gateway nginx -s reload

每月 1 号的 0 点更新证书,一个小时后 reload nginx 的配置。

感谢各位的阅读,以上就是“怎么为docker中的nginx配置https”的内容了,经过本文的学习后,相信大家对怎么为docker中的nginx配置https这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 怎么为docker中的nginx配置https

本文链接: https://www.lsjlt.com/news/96343.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么为docker中的nginx配置https
    这篇文章主要讲解了“怎么为docker中的nginx配置https”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么为docker中的nginx配置http...
    99+
    2022-10-19
  • 怎么在Nginx中对HTTPS nginx.config文件进行配置
    今天就跟大家聊聊有关怎么在Nginx中对HTTPS nginx.config文件进行配置,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。目录位置:/usr/local/www/ngin...
    99+
    2023-06-08
  • Docker怎么安装Nginx并修改Nginx配置文件
    这篇文章主要介绍了Docker怎么安装Nginx并修改Nginx配置文件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Docker怎么安装Nginx并修改Nginx配置文件文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-05
  • Docker nginx怎么安装与配置挂载
    这篇“Docker nginx怎么安装与配置挂载”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这...
    99+
    2022-10-19
  • Nginx中怎么配置TCP
    这期内容当中小编将会给大家带来有关Nginx中怎么配置TCP,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Nginx优化设需要我们注意很多事情,在配置中当keepaliv...
    99+
    2022-10-19
  • 在docker中怎么配置Oracle11g
    这篇文章主要介绍“在docker中怎么配置Oracle11g”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“在docker中怎么配置Oracle11g”文章能帮助大家解决问题。docker镜像拉取及相...
    99+
    2023-07-05
  • Nginx中怎么配置 http服务
    这期内容当中小编将会给大家带来有关Nginx中怎么配置 http服务,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。user www www; ...
    99+
    2022-10-19
  • 怎么为Node.js程序配置使用Nginx服务器
    今天小编给大家分享一下怎么为Node.js程序配置使用Nginx服务器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。node...
    99+
    2023-06-17
  • Nginx的location功能怎么配置
    本篇内容介绍了“Nginx的location功能怎么配置”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Nginx location 1.1....
    99+
    2023-06-29
  • Nginx中怎么配置静态文件
    本篇文章为大家展示了Nginx中怎么配置静态文件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。###################################...
    99+
    2022-10-19
  • Ubuntu中Nginx怎么安装与配置
    本篇内容主要讲解“Ubuntu中Nginx怎么安装与配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ubuntu中Nginx怎么安装与配置”吧!1.nginx...
    99+
    2022-10-19
  • Laradock中Laravel Octane与WebSocket的nginx怎么配置
    今天小编给大家分享一下Laradock中Laravel Octane与WebSocket的nginx怎么配置的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收...
    99+
    2023-07-05
  • 怎么将Nginx配置为ThinkPHP的Web应用程序服务器
    这篇“怎么将Nginx配置为ThinkPHP的Web应用程序服务器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么将Ngi...
    99+
    2023-07-05
  • docker中通过nginx+confd动态生成配置的解决方案
    当我们项目越来越多时手动去服务器修改nginx配置是一件很麻烦而且可能出错的事情。我们可以通过nginx+confd+配置中心实现一套方案避免出错并减少繁琐的流程。 首先直接上ngi...
    99+
    2022-11-13
  • centos7中怎么安装及配置Docker
    这篇文章主要介绍“centos7中怎么安装及配置Docker”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“centos7中怎么安装及配置Docker”文章能帮助大家解决问题。第一步,确定是cento...
    99+
    2023-06-27
  • Nginx怎么配置ssl的crt文件
    本篇内容介绍了“Nginx怎么配置ssl的crt文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!配置https的server,如下:点击(...
    99+
    2023-06-04
  • nginx的负载均衡怎么配置
    要配置NGINX的负载均衡,可以按照以下步骤:1. 安装NGINX:首先需要在服务器上安装NGINX。可以使用操作系统的包管理器进行...
    99+
    2023-09-02
    nginx 负载均衡
  • Linux中怎么配置Nginx反向代理
    Linux中怎么配置Nginx反向代理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。反向代理是什么? 反向代理指以代理服务器来接受Internet上的连接请求,然后将请求转...
    99+
    2023-06-13
  • nginx中怎么配置使用proxy protocol协议
    本文小编为大家详细介绍“nginx中怎么配置使用proxy protocol协议”,内容详细,步骤清晰,细节处理妥当,希望这篇“nginx中怎么配置使用proxy protocol协议”文章能帮助大家解决疑惑,下面跟着小...
    99+
    2023-06-30
  • 怎么在Docker中配置tomcat的内存大小
    怎么在Docker中配置tomcat的内存大小?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、挂载docker中的配置文件通过将docker中tomcat的c...
    99+
    2023-06-14
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作