我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么为docker中的nginx配置https

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么为docker中的nginx配置https

这篇文章主要讲解了“怎么为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这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么为docker中的nginx配置https

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

下载Word文档

猜你喜欢

怎么在Nginx中对HTTPS nginx.config文件进行配置

今天就跟大家聊聊有关怎么在Nginx中对HTTPS nginx.config文件进行配置,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。目录位置:/usr/local/www/ngin
2023-06-08

Nginx作为Docker容器的Web服务器配置详解(在Docker中如何配置Nginx作为Web服务器?)

在Docker中配置Nginx作为Web服务器涉及以下步骤:创建包含Nginx和依赖项的Docker镜像。构建镜像并运行Nginx容器,将容器端口映射到主机端口。优化Nginx配置,包括虚拟主机、根目录、错误页面、SSL/TLS、缓存等。使用日志记录和监控工具管理和监控容器。Nginx配置的优化可以提高性能、安全性、可用性和可管理性。通过Nginx的强大功能和Docker的轻量级,可以轻松部署和托管可扩展、健壮且安全的Web应用程序。
Nginx作为Docker容器的Web服务器配置详解(在Docker中如何配置Nginx作为Web服务器?)
2024-04-02

Nginx作为Docker容器的反向代理配置指南(在Docker中如何配置Nginx作为反向代理?)

本指南详细介绍如何配置Nginx作为Docker容器的反向代理。它包括准备工作、创建反向代理容器、配置应用程序容器、测试反向代理、高级配置和故障排除。配置涉及创建nginx.conf文件、指定反向代理设置和构建容器。高级配置包括SSL/TLS加密、负载均衡、健康检查和缓存。故障排除涉及检查日志、验证容器连接和检查Nginx配置。
Nginx作为Docker容器的反向代理配置指南(在Docker中如何配置Nginx作为反向代理?)
2024-04-02

Nginx在Docker中的文件上传配置与限制(如何在Docker中为Nginx配置文件上传功能?)

在Docker中配置Nginx文件上传时,需要进行特殊设置。在Nginx配置文件中调整上传文件大小限制、临时目录和存放目录。使用-v参数将主机目录挂载到容器中,作为上传文件存放目录。确保目录具有适当权限。测试文件上传功能并注意文件大小和类型限制、临时目录大小和安全考虑。优化性能调整缓冲大小和超时设置。
Nginx在Docker中的文件上传配置与限制(如何在Docker中为Nginx配置文件上传功能?)
2024-04-02

Nginx在Docker中的HTTP/2支持配置(如何在Docker中为Nginx启用HTTP/2支持?)

通过在Docker中配置Nginx,可启用HTTP/2支持,从而提升网站性能和降低延迟。具体步骤包括:创建并编辑配置文件nginx.conf,指定监听端口443及SSL证书。创建Dockerfile,从Nginx镜像构建并复制nginx.conf。构建Docker镜像并运行容器。使用curl命令测试HTTP/2支持。
Nginx在Docker中的HTTP/2支持配置(如何在Docker中为Nginx启用HTTP/2支持?)
2024-04-02

Nginx在Docker中的URL重写与重定向配置(如何在Docker中为Nginx配置URL重写与重定向?)

通过Docker配置Nginx时,可以使用nginx.conf配置文件对URL进行重写和重定向。使用rewrite指令重写URL,使用return指令重定向URL。将配置文件挂载到Docker容器中并重新启动Nginx服务以应用更改。确保规则顺序正确,并考虑使用其他指令(如try_files)和日志记录功能。
Nginx在Docker中的URL重写与重定向配置(如何在Docker中为Nginx配置URL重写与重定向?)
2024-04-02

Docker怎么安装Nginx并修改Nginx配置文件

这篇文章主要介绍了Docker怎么安装Nginx并修改Nginx配置文件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Docker怎么安装Nginx并修改Nginx配置文件文章都会有所收获,下面我们一起来看看吧
2023-07-05

Docker容器中的Nginx安全头设置与防护(如何在Docker中为Nginx配置安全响应头?)

在Docker容器中为Nginx配置安全响应头至关重要,步骤包括:编辑配置文件、添加安全响应头、保存配置和重启Nginx。安全响应头包括:STS:强制HTTPS连接XFO:防止点击劫持XCO:防止MIME嗅探XXP:启用XSS过滤器CSP:限制恶意内容执行
Docker容器中的Nginx安全头设置与防护(如何在Docker中为Nginx配置安全响应头?)
2024-04-02

怎么使用Nginx实现HTTPS和SSL证书配置

要在Nginx上实现HTTPS和SSL证书配置,可以按照以下步骤进行:生成SSL证书和私钥文件首先,需要生成SSL证书和私钥文件。可以使用openssl工具生成自签名证书,或者购买SSL证书。配置Nginx支持HTTPS在Nginx配置
怎么使用Nginx实现HTTPS和SSL证书配置
2024-04-09

Docker中Nginx的自定义错误页面配置(如何在Docker中为Nginx设置自定义错误页面?)

通过在Docker容器中配置Nginx,您可以创建自定义错误页面,提升用户体验并提供清晰的信息。具体步骤包括:创建自定义错误页面,修改Nginx配置文件,添加错误代码到自定义页面,重新加载或重启Nginx,最后测试自定义错误页面。还可以使用location块进一步定制行为,确保文件权限,并考虑错误跟踪工具以捕获和分析错误。定期更新错误页面以提供准确且有帮助的信息。
Docker中Nginx的自定义错误页面配置(如何在Docker中为Nginx设置自定义错误页面?)
2024-04-02

Nginx在Docker中的静态资源服务配置与优化(如何在Docker中为Nginx配置高效的静态资源服务?)

在Docker环境中配置Nginx提供高效的静态资源服务涉及创建Dockerfile、构建镜像和运行容器。Nginx配置(nginx.conf)指定静态文件位置和处理规则。优化技巧包括启用gzip压缩、设置缓存头和使用CDN。监控和故障排除对于确保服务正常运行至关重要,可以利用Nginx日志、监控工具和测试工具。通过遵循这些步骤和技巧,可以在Docker中为Nginx配置高效的静态资源服务。
Nginx在Docker中的静态资源服务配置与优化(如何在Docker中为Nginx配置高效的静态资源服务?)
2024-04-02

Docker中Nginx的缓存策略与性能优化(如何在Docker中为Nginx配置高效的缓存策略?)

Docker中Nginx的缓存策略和性能优化至关重要。通过HTTP缓存、代理缓存、反向代理缓存和数据库缓存的合理配置,可以显著提升响应时间和减少服务器负载。此外,禁用未使用功能、优化工作进程配置、启用GZIP压缩、使用CDN和持续监控等性能优化措施可进一步增强Nginx的表现。定期调整策略和优化配置,确保在Docker环境中高效运行Nginx,提供最佳的Web体验。
Docker中Nginx的缓存策略与性能优化(如何在Docker中为Nginx配置高效的缓存策略?)
2024-04-02

基于Docker的Nginx SSL证书配置与自动更新(如何在Docker中为Nginx配置SSL证书并实现自动更新?)

基于Docker的NginxSSL证书配置与自动更新指南,涵盖了创建CSR、从CA获取证书、配置Nginx、实现自动更新(通过Certbot容器、内置命令或Cron作业),以及最佳实践(强密钥、定期更新、可信CA、监控、CSP、HSTS)。
基于Docker的Nginx SSL证书配置与自动更新(如何在Docker中为Nginx配置SSL证书并实现自动更新?)
2024-04-02

Docker中Nginx配置文件的管理与动态更新(如何在Docker中有效管理Nginx的配置文件?)

Docker中有效管理Nginx配置文件的策略包括:静态配置:配置文件挂载Dockerfile配置动态配置:环境变量ConfigMaps和Secrets热重载管理策略:CI/CD版本控制自动化工具最佳实践:模块化配置注释测试和验证监控和警报
Docker中Nginx配置文件的管理与动态更新(如何在Docker中有效管理Nginx的配置文件?)
2024-04-02

在docker中怎么配置Oracle11g

这篇文章主要介绍“在docker中怎么配置Oracle11g”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“在docker中怎么配置Oracle11g”文章能帮助大家解决问题。docker镜像拉取及相
2023-07-05

Docker化Nginx:多域名管理与SSL支持(在Docker中如何为Nginx配置多域名及SSL支持?)

在Docker中配置Nginx支持多域名和SSL,可创建隔离且安全的Web服务器环境。通过创建Dockerfile、配置NginxVirtualHost和运行容器,您可以设置Nginx处理来自多个域名的请求,并使用SSL保护连接。该指南提供了逐步说明和示例配置,以简化部署过程。通过Docker的隔离和可移植性,您可以轻松管理Nginx实例并增强其安全性。
Docker化Nginx:多域名管理与SSL支持(在Docker中如何为Nginx配置多域名及SSL支持?)
2024-04-02

Docker容器化Nginx的端口映射与网络配置(如何在Docker中配置Nginx的端口映射和网络?)

通过Docker容器化Nginx可增强隔离性、可移植性和可扩展性。端口映射允许将容器端口与主机端口关联,而网络配置可定义容器的网络访问属性。默认网络模式为bridge,但host模式可共享主机的网络接口。其他网络配置选项包括别名、暴露端口、链接以及DNS服务器和域的指定。
Docker容器化Nginx的端口映射与网络配置(如何在Docker中配置Nginx的端口映射和网络?)
2024-04-02

编程热搜

目录