acme云服务器生成证书_如何让docker 部署的nginx上通过acme.sh安装ssl/https 证书
本篇文章是教大家如何在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 证书相关推荐
- acme云服务器生成证书_使用 acme.sh 申请 SSL 证书并且定期自动更新
在我们的实际项目生产过程中往往需要为部署的服务和域名配置 SSL 证书,可以采用的方法有很多种,例如可以申请阿里云的免费 SSL 证书,或者也可以使用 CloudFlare 的 SSL 服务.本文介绍 ...
- acme云服务器生成证书_腾讯云DNSPOD,利用acme申请免费ssl证书。
有几个客户的域名是使用dnspod来管理域名dns,记录一下申请ssl证书的过程. acme.sh 官方链接 dnspod.cn 需要先申请api 操作密锁,路径是: 账号中心-密锁管理 1.下载ac ...
- 服务器生成镜像文件,云服务器 生成镜像
云服务器 生成镜像 内容精选 换一换 可以考虑如下方案:(推荐)使用云备份服务为云服务器创建定时备份.当云服务器故障时,选择需要恢复的时间点所对应的备份副本,将其制作为整机镜像,然后使用该镜像申请新的 ...
- 云服务器 架设传奇_阿里云虚拟主机,ECS服务器,轻量应用服务器有什么区别,该如何选择?...
先说虚拟主机与ECS云服务器区别: 1.供应和部署时间不同: 虚拟主机--数天至数周.云服务器--即时,几分钟即可完成,可一键部署.也可自主安装操作系统. 2.安全可靠性不同 虚拟主机--一般:租用白 ...
- https://是什么?HTTPS和HTTP有什么不一样?如何申请SSL(HTTPS)证书?
一.https://是什么 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Pr ...
- HTTPS和HTTP有什么不一样?如何申请SSL(HTTPS)证书?
一.https://是什么 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Pr ...
- 安装个https证书要多少钱
在全网HTTPS加密的趋势下,部署https证书已经是网站安全必备的方式.然而,https证书的价格可谓天差地别,为什么安装个https证书费用从几百元到几万元不等? 这就要从https证书的种类说起 ...
- 云服务器快速建网站_安装BT宝塔面板和wordpress
简介 买了阿里云云服务器后,打算来折腾一下服务器.服务器都有哪些用途? 大概列一下常用的方法: 建网站.博客.就是这篇文章所说的内容.为甚么要自己建立博客?因为博客在自己手上总是比较踏实.像社交网站兴 ...
- gpu云服务器运行游戏_在滴滴云 GPU 服务器上使用NVIDIA NGX环境搭建
1.NGX 简介 NVIDIA NGX是一个新的深度学习技术,将基于AI的加速和增强图像.视频处理的功能直接集成到应用程序中.NVIDIA NGX利用Tensor Core最大限度地提高其运行效率,因 ...
最新文章
- 这里有 8 个流行的 Python 可视化工具包,你喜欢哪个?
- Android环境搭建遭遇Unsupported major.minor version 52.0
- 防止Visual C++应用程序缓冲区溢出
- 仿芒果TV微信小程序
- [COURSE_PTHE] 18. 缓冲区溢出
- php mysql搜索算法_PHP实现深度优先搜索算法(DFS,Depth First Search)详解
- Anime Studio Pro v6 汉化版
- border-radius 移动之伤
- 移动端动画使用transform提升性能
- 手动挡五个档位示意图_小型C1手动挡汽车档位分布示意图
- android开发微信分享隐藏logo,前两天刚刚做了微信分享自定义logo和文字,做个标记,从零开始记录...
- 使用NanoHTTPD在Android上建立本地服务器
- 有小数点的补码怎么算_-49d补码的是多少?怎样计算的?
- 中小学数学卷子自动生成程序-----队友项目评价
- 如何通过chrome来找到猫眼电影评论url
- Android AOP 面向切面编程
- camera sensor简单曝光原理
- 电视盒子搜索不到电脑开出热点的问题
- 2016全国大学生计算机设计大赛,“中国大学生计算机设计大赛”简介
- 把jpg转换成pdf教程