本篇文章是教大家如何在docker部署的nginx上通过acme.sh安装ssl/https 证书。

由于文中例子是通过acme.sh的http验证方式生成证书,所以在此之前,必须保证你的网站能通过http访问。

目录&流程

[toc]

1.服务器环境介绍

首先介绍我当前的服务器环境。

1) 阿里云ecs,系统:centos 7

2) 使用docker-compose 配置的php+mysql+nginx环境,nginx直接拉取官方最新版本。

其中nginx容器向外映射

端口:80(http)、443(https)

路径:- /home/www:/var/www/html (项目文件路径)

- /home/docker/lnmp/nginx/conf:/etc/nginx/conf.d (配置文件)

- /home/docker/lnmp/nginx/ssl:/etc/nginx/ssl。(存放ssl证书路径)

- /home/docker/lnmp/nginx/log:/var/log/nginx。 (日志路径)

3) 域名:nuomiphp.com,http能正常访问。

以上配置只是作为参考,原理都一样,请大家因地制宜,不一定要跟我的配置相同。

2.准备工作

2.1 开通阿里云端口

默认情况下,阿里云服务器的80(http)、443(https)端口是关闭。需要在安全组和系统防火墙开启。

具体可参考文章

2.2 映射容器端口

将本地 80、3306 端口映射到nginx容器内部的 80、3306端口

2.3 挂载容器目录 (选配)

将主机中项目的目录ssl挂载nginx容器的/etc/nginx/ssl,用于存放ssl证书。如:- /home/docker/lnmp/nginx/ssl:/etc/nginx/ssl。(存放ssl证书路径)

- /home/docker/lnmp/nginx/log:/var/log/nginx。 (日志路径,方便调试)

2.4 配置顶级域名的解析

由于acme.sh的http认证过程,需要访问配置域名的顶级域名。如www.nuomiphp.com 会访问nuomiphp.com这个顶级域名。所以需要在阿里云设置顶级域名的解析。如图:

3.使用acme.sh生成证书

acme.sh有http 和 dns 两种验证安装,本文使用的是http安装。相关资料可参考acme.sh介绍

3.1 安装 acme.sh

1) 安装很简单, 一个命令:curl https://get.acme.sh | sh

2) 把 acme.sh 安装到你的 home 目录下:~/.acme.sh/

并创建 一个 bash 的 alias, 方便你的使用: alias acme.sh=~/.acme.sh/acme.sh

3.2 生成证书acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/

注意:

1) 本文使用的是http方式验证生成。

2) 假设你的域名是nuomiphp.com,那边必须保证nuomiphp.com和www.nuomiphp.com能通过浏览器正常访问,因为在acme.sh认证过程中,会在网站目录下生成验证文件,格式类似:http://nuomiphp.com/.well-known/acme-challenge/_sw4yO3tQM11kAmppJaGPuZwuW4xUFlHfva5-VVgqtQ 必须保证这样的路径能访问。

成功后的截图:

3.3 copy/安装 证书

前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.

注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.

正确的使用方法是使用 --installcert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置,

例如:acme.sh --installcert -d .com \

--key-file /etc/nginx/ssl/.key \

--fullchain-file /etc/nginx/ssl/fullchain.cer \

--reloadcmd "service nginx force-reload"

前面这几段是官方的说明,但由于我们的nginx是docker里的,配置有稍微不同。

1) 前面说了,主机映射到容器的目录是/home/docker/lnmp/nginx/ssl,所以copy的证书应该都放到这都这个目录西下。

2) reloadcmd命令是设置acme.sh自动续费后重启nginx用的,由于我们的nignx是docker里运行的,需要改成docker restart lnmp_nginx_1,其中lnmp_nginx_1是容器名称,通过docker ps可查看得到

最后,修改后的命令应该是这样:acme.sh --installcert -d nuomiphp.com \

--key-file /home/docker/lnmp/nginx/ssl/nuomiphp/nuomiphp \

--fullchain-file /home/docker/lnmp/nginx/ssl/nuomiphp/fullchain.cer \

--reloadcmd "docker restart lnmp_nginx_1"

注意:这里ssl/nuomiphp是考虑到一个服务器可能有多个域名,所以我在ssl目录另建nuomiphp目录。

4.检查nginx是否安装ssl模块

由于我拉取的是官方最新nginx镜像,默认是已安装ssl模块。

大家不确定的话,可以通过docker exec it 容器ID /bin/bash进入nginx容器

然后输入命令nginx -V 查看

如果发现含有onfigure arguments:里含有 http_ssl_module说明已安装ssl模块

5.配置nginx

5.1 备份原配置

如果原来有网站的话,可以通过cp xxx.conf xxx.bx 备份

5.2 配置nginx

开启ssllisten 443 ssl;

server_name nuomiphp.com www.nuomiphp.com ww.nuomiphp.com;

root /var/www/html/nuomiphp/public;

index index.html index.htm index.php default.html default.htm default.php;

ssl_certificate /etc/nginx/ssl/nuomiphp/fullchain.cer;

ssl_certificate_key /etc/nginx/ssl/nuomiphp/nuomiphp.key;

ssl_protocols TLSv1.1 TLSv1.2;

ssl_session_timeout 5m;

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

ssl_prefer_server_ciphers on;

其中 ssl_certificate、ssl_certificate_key 对应上一步骤copy过来的cer和key

这是完整配置,可作参考server {

#开启ssl

listen 443 ssl;

server_name nuomiphp.com www.nuomiphp.com ww.nuomiphp.com;

root /var/www/html/nuomiphp/public;

index index.html index.htm index.php default.html default.htm default.php;

ssl_certificate /etc/nginx/ssl/nuomiphp/fullchain.cer;

ssl_certificate_key /etc/nginx/ssl/nuomiphp/nuomiphp.key;

ssl_protocols TLSv1.1 TLSv1.2;

ssl_session_timeout 5m;

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

ssl_prefer_server_ciphers on;

#开启gzip压缩

gzip on;

gzip_min_length 1k;

gzip_buffers 4 16k;

gzip_http_version 1.1;

gzip_comp_level 9;

gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/javascript application/json;

gzip_disable "MSIE [1-6]\.";

gzip_vary on;

#日志

access_log /var/log/nginx/nuomiphp.access.log main;

error_log /var/log/nginx/nuomiphp.error.log error;

#隐藏index.php

location / {

index index.html index.htm index.php;

#主要是这一段一定要确保存在

if (!-e $request_filename) {

rewrite ^(.*)$ /index.php?s=/$1 last;

break;

}

#结束

#autoindex on;

}

#php解析配置

location ~ \.php(.*)$ {

fastcgi_pass php:9000;

fastcgi_index index.php;

fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param PATH_INFO $fastcgi_path_info;

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;

include fastcgi_params;

}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html

#

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root /usr/share/nginx/html;

}

# deny access to .htaccess files, if Apache's document root

# concurs with nginx's one

#

#location ~ /\.ht {

# deny all;

#}

}

#对http请求重定向到https

server {

listen 80;

server_name nuomiphp.com www.nuomiphp.com ww.nuomiphp.com;

rewrite ^(.*)$ https://$host$1 permanent;

location / {

index index.html index.htm;

}

}

配置完后,重启nginx,这是如果能通过https访问网站,则代表配置成功。

6.总结

总的来讲,由于acme.sh自动化配置,配置下来并没有复杂的操作。

主要多注意些细节,比如:

1) 443端口忘了开放

1) 顶级域名忘了解析

1) 等等等

运用点小技巧,比如

1) 在配置nginx过程中,可能需要频繁的重启nginx。这时可以通过docker exec -it 容器ID /bin/bash 命令进入容器,通过nginx -s reload来快速刷新nginx配置,好处就是快速,并且哪怕配置错了,也不会影响之前的已生效的配置。

最后,感想letsencrypt 和 acme.sh ~!为我们提供了免费的ssl方案!:clap:

acme云服务器生成证书_如何让docker 部署的nginx上通过acme.sh安装ssl/https 证书相关推荐

  1. acme云服务器生成证书_使用 acme.sh 申请 SSL 证书并且定期自动更新

    在我们的实际项目生产过程中往往需要为部署的服务和域名配置 SSL 证书,可以采用的方法有很多种,例如可以申请阿里云的免费 SSL 证书,或者也可以使用 CloudFlare 的 SSL 服务.本文介绍 ...

  2. acme云服务器生成证书_腾讯云DNSPOD,利用acme申请免费ssl证书。

    有几个客户的域名是使用dnspod来管理域名dns,记录一下申请ssl证书的过程. acme.sh 官方链接 dnspod.cn 需要先申请api 操作密锁,路径是: 账号中心-密锁管理 1.下载ac ...

  3. 服务器生成镜像文件,云服务器 生成镜像

    云服务器 生成镜像 内容精选 换一换 可以考虑如下方案:(推荐)使用云备份服务为云服务器创建定时备份.当云服务器故障时,选择需要恢复的时间点所对应的备份副本,将其制作为整机镜像,然后使用该镜像申请新的 ...

  4. 云服务器 架设传奇_阿里云虚拟主机,ECS服务器,轻量应用服务器有什么区别,该如何选择?...

    先说虚拟主机与ECS云服务器区别: 1.供应和部署时间不同: 虚拟主机--数天至数周.云服务器--即时,几分钟即可完成,可一键部署.也可自主安装操作系统. 2.安全可靠性不同 虚拟主机--一般:租用白 ...

  5. https://是什么?HTTPS和HTTP有什么不一样?如何申请SSL(HTTPS)证书?

    一.https://是什么 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Pr ...

  6. HTTPS和HTTP有什么不一样?如何申请SSL(HTTPS)证书?

    一.https://是什么 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Pr ...

  7. 安装个https证书要多少钱

    在全网HTTPS加密的趋势下,部署https证书已经是网站安全必备的方式.然而,https证书的价格可谓天差地别,为什么安装个https证书费用从几百元到几万元不等? 这就要从https证书的种类说起 ...

  8. 云服务器快速建网站_安装BT宝塔面板和wordpress

    简介 买了阿里云云服务器后,打算来折腾一下服务器.服务器都有哪些用途? 大概列一下常用的方法: 建网站.博客.就是这篇文章所说的内容.为甚么要自己建立博客?因为博客在自己手上总是比较踏实.像社交网站兴 ...

  9. gpu云服务器运行游戏_在滴滴云 GPU 服务器上使用NVIDIA NGX环境搭建

    1.NGX 简介 NVIDIA NGX是一个新的深度学习技术,将基于AI的加速和增强图像.视频处理的功能直接集成到应用程序中.NVIDIA NGX利用Tensor Core最大限度地提高其运行效率,因 ...

最新文章

  1. 这里有 8 个流行的 Python 可视化工具包,你喜欢哪个?
  2. Android环境搭建遭遇Unsupported major.minor version 52.0
  3. 防止Visual C++应用程序缓冲区溢出
  4. 仿芒果TV微信小程序
  5. [COURSE_PTHE] 18. 缓冲区溢出
  6. php mysql搜索算法_PHP实现深度优先搜索算法(DFS,Depth First Search)详解
  7. Anime Studio Pro v6 汉化版
  8. border-radius 移动之伤
  9. 移动端动画使用transform提升性能
  10. 手动挡五个档位示意图_小型C1手动挡汽车档位分布示意图
  11. android开发微信分享隐藏logo,前两天刚刚做了微信分享自定义logo和文字,做个标记,从零开始记录...
  12. 使用NanoHTTPD在Android上建立本地服务器
  13. 有小数点的补码怎么算_-49d补码的是多少?怎样计算的?
  14. 中小学数学卷子自动生成程序-----队友项目评价
  15. 如何通过chrome来找到猫眼电影评论url
  16. Android AOP 面向切面编程
  17. camera sensor简单曝光原理
  18. 电视盒子搜索不到电脑开出热点的问题
  19. 2016全国大学生计算机设计大赛,“中国大学生计算机设计大赛”简介
  20. 把jpg转换成pdf教程

热门文章

  1. 简单给element-plus的Skeleton做个Vue3组件——预加载骨架屏图像组件
  2. 十年软件测试老司机,感悟!!送给刚入测试行业的萌新!!
  3. cumulative sum
  4. Scrapy框架爬取中国裁判文书网案件数据
  5. Linux测试端口是否ping的方法
  6. 打游戏的蓝牙耳机推荐哪一款?英雄联盟电竞耳机推荐
  7. MS1826 HDMI 四进四出多功能视频处理器
  8. 校园表白墙--用到的用例图和活动图汇总
  9. 【Python】Python中的时间函数strftime与strptime对比
  10. 一句话木马拿shell原理及菜刀的使用