Nginx/Apache + acme.sh 实现https访问
1 概述
acme.sh实现了acme协议,可以从Let‘s Encrypt生成免费的ssl证书用于实现https,本文介绍了常见的两种服务器Apache与Nginx上利用acme.sh配置https服务。
约定:
APACHE_INSTALL_DIR --- Apache安装目录
NGINX_INSTALL_DIR --- Nginx安装目录
www.test.com --- 测试域名,请按需要换成自己的域名
2 准备工作
- 一个域名
- 一台云服务器
2.1 域名与服务器
域名与服务器直接买就好了,笔者的都是在阿里云上买的。
2.2 域名解析
需要确保域名可以解析到对应的ip上面,一般的域名购买商会提供解析服务,按图形界面操作即可,以阿里云为例,选择域名进行解析:

主机记录填www,记录值填服务器公网ip.

间隔十分钟左右可以ping一下自己的域名,如果显示服务器ip则解析成功。
2.2 端口
服务器要开启80与443端口,80用于HTTP测试,443用于HTTPS访问。以阿里云为例:





3 Nginx
Nginx有两种安装方式,一种是仓库形式安装,另一种是从源码编译安装。
3.1 编译安装的Nginx(1.17.9)
3.1.1 安装Nginx
先去下载源码,上传到服务器,解压:
tar -zxvf nginx-1.17.9.tar.gz
cd nginx-1.17.9
可以先使用
./configure --help
查看选项帮助,这里要注意一下pcre与openssl,是源码目录,不是安装目录,安装之后删了源码的,重新来这里下载pcre与这里下载openssl,注意一定需要http_ssl_module这个模块,不要漏了。
./configure --prefix=/xxxxx --with-pcre=/xxxxx --with-openssl=/xxxx --with-http_ssl_module
make
sudo make install
好了之后进入安装目录下的sbin,启动服务。
cd NGINX_INSTALL_DIR/sin
./nginx
然后可以在浏览器输入服务器公网ip测试一下:

3.1.2 证书处理
首先安装acme.sh
curl https://get.acme.sh | sh
. ~/.bashrc

生成证书
acme.sh --issue -d www.test.com --webroot NGINX_INSTALL_DIR/html
webroot的话就直接使用Nginx的默认文档根目录。好了之后会看到这样的提示:

接着安装证书:
acme.sh --installcert \
-d www.test.com \
--keypath /xxxx/xxx.key \
--fullchainpath /xxx/xxx.pem
路径与名字随便,后缀不能变。

3.1.3 Nginx配置
修改Nginx配置文件:
cd NGINX_INSTALL_DIR/conf
cp nginx.conf nginx.conf.bak
vim nginx.conf
找到HTTPS server这一行,这里是96行,把从server开始到最后一个花括号的代码全部去掉注释。

然后修改这三行,server_name填域名,ssl_certificate填刚才的pem文件路径,ssl_certificate_key填刚才的key文件路径。路径建议绝对路径,可以不加双引号。

记得记得要加上一行ssl协议:

3.1.4 测试
可以先使用-t测试语法错误:
cd NGINX_INSTALL_DIR/sbin
./nginx -t
ok的话,重启服务并输入域名测试:
cd NGINX_INSTALL_DIR/sbin
./nginx -s stop
./nginx


成功!
3.2 从仓库安装Nginx(1.16.1)
3.2.1 安装Nginx
从仓库安装就简单多了,一行就可以了,系统Centos,其他自行搜索:
yum install nginx
可以先测试一下,直接用
nginx
开启服务,然后浏览器输入公网ip:

(笔者有点怀疑是不是装了个假的Nginx,两个的主页居然不一样。。。。)
3.2.2 证书处理
没安装acme.sh的先安装:
curl https://get.acme.sh | sh
. ~/.bashrc
申请证书:
acme.sh --issue -d www.test.com --webroot /usr/share/nginx/html
安装证书:
acme.sh --installcert \
-d www.test.com \
--keypath /xxxx/xxx.key \
--fullchainpath /xxx/xxx.pem
3.2.3 Nginx配置
同样先备份:
cd /etc/nginx
cp nginx.conf nginx.conf.bak
vim nginx.conf
这里的配置比编译安装的又多了不少,一样从server(61行)开始去掉注释:

然后修改三行:

server_name填域名,ssl_certificate填pem文件,ssl_certificate_key填key文件。
最后增加一行ssl协议:

3.2.4 测试
可以先用-t测试语法错误:
nginx -t
ok的话重启服务:
nginx -s stop
nginx
浏览器输入域名访问:


4 Apache
Apache也有两种安装方式,从源码编译安装与从仓库安装。
4.1 编译安装的Apache(2.4.41)
4.1.1 安装Apache
编译安装Apache比较麻烦,需要安装pcre,apr,apr-util,生成Makefile时需要指定以下几个选项:
--with-apr \
--with-apr-util \
--with-pcre \
--enable-ssl \
--with-ssl
具体可以看这里。
安装好了之后需要先确定ssl模块是否存在:
cd APACHE_INSTALL_DIR/modules
ls | grep ssl
如果没有显示mod_ssl.so,则需要重新安装,确定生成Makefile时没有漏掉
--enable-ssl
与
--with-ssl
如果有ssl模块,直接修改配置文件测试一下。
cd APACHE_INSTALL_DIR/conf
vim httpd.conf
修改ServerName为
localhost:80

启动服务输入localhost测试:
cd APACHE_INSTALL_DIR/bin
./apachectl
页面只有一行It works!:

(话说这和仓库安装的Apache首页差距这么大。。。)
4.1.2 证书处理
没安装acme.sh的先安装:
curl https://get.acme.sh | sh
. ~/.bashrc
申请证书:
acme.sh --issue -d www.test.com --webroot APACHE_INSTALL_DIR/htdocs
这里webroot为Apache默认的文档根目录.
安装证书:
acme.sh --installcert -d www.test.com \
--key-file /xxxx/xxx.key \
--cert-file /xxxx/xxxx.crt \
--fullchain-file /xxx/xxxfullchain.crt
路径与名字随便,后缀名不能变。
4.1.3 Apache配置
首先修改conf/httpd.conf:
cd APACHE_INSTALL_DIR/conf
cp httpd.conf httpd.conf.bak
vim httpd.conf



找到这三行,去掉注释。
然后修改httpd-ssl.conf:
cd extra
cp http-ssl.conf http-ssl.conf.bak
vim httpd-ssl.conf

DocumentRoot可以默认,ServerName改成
www.test.com:443
然后修改这三行,把证书的文件相应填入。

4.1.4 测试
语法检查:
cd APACHE_INSTALL_DIR/bin
./apachectl -t
没有错误之后重启服务:
./apachectl stop
./apachectl
浏览器输入域名访问:


4.2 从仓库安装的Apache(2.4.6)
4.2.1 安装Apache
yum install httpd
修改配置文件并进行测试:
cd /etc/httpd/conf
cp httpd.conf httpd.conf.bak
vim httpd.conf
找到ServerName改成
localhost:80

开启服务后输入localhost:80.
systemctl start httpd

另外要确保ssl模块存在:
cd /etc/httpd/modules
ls | grep ssl
如果没有输出的话,证明没有ssl模块,需要安装:
yum install mod_ssl
再一次grep:
ls | grep ssl

4.2.2 证书处理
没安装acme.sh的先安装:
curl https://get.acme.sh | sh
. ~/.bashrc
申请证书:
acme.sh --issue -d www.test.com --webroot /var/www/html
其中/var/www/html为Apache默认文档根目录。
安装证书:
acme.sh --installcert -d www.test.com \
--key-file /xxxx/xxx.key \
--cert-file /xxxx/xxxx.crt \
--fullchain-file /xxx/xxxfullchain.crt

4.2.3 Apache配置
修改ssl.conf:
cd /etc/httpd/conf.d
cp ssl.conf ssl.conf.bak
vim ssl.conf

修改ServerName与DocumentRoot,ServerName填域名,DocumentRoot直接去掉注释。接着修改以下三行,根据刚才生成的三个文件对应填入即可。

4.2.4 测试
apachectl -t
没有语法错误就重启服务:
systemctl stop httpd
systemctl start httpd
浏览器输入访问:

5 总结
其实这里采用了比较麻烦的方式手动安装证书,acme.sh其实还有更简单的不需要webroot的命令:
acme.sh --issue -d www.test.com --apache
acme.sh --issue -d www.test.com --nginx
另外还可以通过手动dns的方式:
acme.sh --issue -d www.test.com --dns dns_xxx
这种方式可以利用域名解析商提供的api自动添加记录完成认证,可以参考这里。
另外文章没有说到证书过期更新的问题,可以看官方中文说明,这里。
除此之外还可以利用openssl使安全性的评分更高,测试网站这里,修改配置这里。
还有最后一个,现有云服务器厂商提供了免费的证书购买,如阿里云,可以直接购买免费证书然后利用文档安装到服务器上。
祝你们早日有一个属于自己的https的网站。
Nginx/Apache + acme.sh 实现https访问的更多相关文章
- Linux下使用acme.sh 配置https 免费证书
acme.sh 简单来说acme.sh 实现了 acme 协议, 可以从 let‘s encrypt 生成免费的证书.acme.sh 有以下特点:一个纯粹用Shell(Unix shell)语言编写的 ...
- Nginx配置http跳转https访问
Nginx强制http跳转https访问有以下几个方法 nginx的rewrite方法 可以把所有的HTTP请求通过rewrite重写到HTTPS上 配置 方法一 server{ listen ; s ...
- 阿里云Ubuntu 14.04 + Nginx + let's encrypt 搭建https访问
参考页面: https://certbot.eff.org/#ubuntutrusty-nginx http://bbs.qcloud.com/thread-12059-1-1.html http:/ ...
- nginx配置ssl证书实现https访问
一,环境说明 服务器系统:ubuntu16.04LTS 服务器IP地址:47.89.12.99 域名:bjubi.com 二,域名解析到服务器 在阿里云控制台-产品与服务-云解析DNS-找到需要解析的 ...
- 阿里云 nginx配置ssl证书实现https访问
一,环境说明 服务器系统:ubuntu16.04LTS 服务器IP地址:47.89.12.99 域名:bjubi.com 二,域名解析到服务器 在阿里云控制台-产品与服务-云解析DNS-找到需要解析的 ...
- nginx/apache静态资源跨域访问问题详解
1. apache静态资源跨域访问 找到apache配置文件httpd.conf 找到这行 #LoadModule headers_module modules/mod_headers.so把#注释符 ...
- [转帖]nginx配置ssl证书实现https访问
https://www.cnblogs.com/tianhei/p/7726505.html 今天就是如此处理的 感觉挺不错的. 一,环境说明 服务器系统:ubuntu16.04LTS 服务器IP地址 ...
- Nginx配置SSL证书实现https访问「浏览器未认证」
http 和 https 介绍 http:应用最广泛的一种网络协议,是一个B/S的request和response的标准,用于从www服务器传输超文本到本地浏览器的传输协议. https:以安全为目标 ...
- centos7 nginx配置ssl证书实现https访问同时http访问
1,首先将你申请到的nginx 分类下的ssl证书上传到nginx的config下(可以新建一个目录叫ssl.) 2.修改nginx的config配置 server {listen 80;(监听80端 ...
随机推荐
- 为什么ElasticSearch比MySQL更适合全文索引
熟悉 MySQL 的同学一定都知道,MySQL 对于复杂条件查询的支持并不好.MySQL 最多使用一个条件涉及的索引来过滤,然后剩余的条件只能在遍历行过程中进行内存过滤,对这个过程不了解的同学可以先行 ...
- Linux文件/proc/net/tcp分析
本文转载自Linux文件/proc/net/tcp分析 导语 /proc/net/tcp文件提供了tcp的连接信息,是由net/ipv4/tcp_ipv4.c中的tcp4_seq_show()实现信息 ...
- .NET Core Swagger 的分组使, 以及相同Action能被多个分组公用,同时加载出尚未分组的数据出来
1.本文章参考 点击链接跳转 改写的 一对多分组模式.需要一对一的可以参考 2.本文主要讲的是 一对多 分组公用, 同时把尚未分组的加载出来 3.效果演示GIF图: 具体操作代码如下: 1.在项目创建 ...
- 手把手教你gitlab汉化
详细教程如下: 一.在Github上 https://gitlab.com/xhang/gitlab/-/tags 下载对应的版本到服务器中 这种-zh结尾的才是汉化包,下载速度可能比较慢,有条件的可 ...
- nacos服务注册之服务器端Raft
Raft是持久化,数据存储在\nacos\data\naming\data目录 nacos启动后首先从数据存储目录加载数据 Raft协议中节点只有一个LEADER,只有LEADER节点负责数据写入,F ...
- 一文帮你搞懂 Android 文件描述符
介绍文件描述符的概念以及工作原理,并通过源码了解 Android 中常见的 FD 泄漏. 一.什么是文件描述符? 文件描述符是在 Linux 文件系统的被使用,由于Android基 于Linux 系统 ...
- Linux速通06 系统的初始化服务和监控
Linux系统引导的顺序 # 掌握 Linux系统引导的顺序 * BIOS的工作是检查计算机的硬件设备,如CPU.内存和风扇速度等 * MBR会在启动盘的第一个块中,大小为512B,其中前446B是引 ...
- Asp.Net Core WebAPI中启用XML格式数据支持
因为XML是一种非常常用的数据格式,所以Asp.Net core提供了非常便利的方式来添加对XML格式的支持 只需要在IOC注册Controller服务的后面跟上.AddXmlDataContract ...
- python爬虫(正则取数据)读取表格内的基金代码后爬取基金最新净值,同时写到对应的表格中,基于最近一次购买净值计算出涨跌幅(名字有点长)
最近基金跌的真够猛,虽说是定投,但大幅度下跌,有时候适当的增加定投数也是降低平均成本的一种方式 每天去看去算太费时间,写了个爬虫,让他自动抓数据后自动计算出来吧 实现逻辑: 1.创建了一个excel表 ...
- Linux-mysql服务级别对DB的操作要领[导出-导入(执行SQL)]及修改数据库名称
A:docker容器的mysql docker exec -it mysql bash -- 进入容器 备份脚本 mysqldump -uroot -p123456 --databases dbNam ...