SSL证书 基于Nginx配置Https
前言
最近一段时间在搞自己的博客网站,本地环境一直使用的HTTP协议,但在上线发布到个人服务器后还使用HTTP访问就有点说不过去了。
另外博客网站的基础架构为 Hexo框架 + Butterfly主题 + 博客后端管理(自己开发便于管理博客);此处涉及到自己个人后台服务以及服务端数据库的基本操作,还包括阿里云OSS存储对象。考虑至此,还是打算安装SSL证书,采用HTTPS方式堆外提供访问(其实最多的想法还是担心对于不搞程序的盆友们一看到不安全的链接就直接劝退了,这是万万伤不起的)。毕竟自己也是土生土长的程序猿,怎么能容忍此种情况发生。
虽然自己之前没搞过Nginx方面的东西,但这些都不是问题,只有一句话:“没有不会搞,只有不想搞”。
使用的环境如下:
1 | 服务器: 腾讯云轻量应用服务器(1G,2core) |
申请证书
此处采用的是腾讯云域名解析,首选先申请个人域名,并添加至域名解析中。
点击域名进入域名记录列表配置页,添加域名解析记录:
添加完成后可在页面最上端前往 DNSPod控制台 进行SSL证书申请,找到刚刚添加的记录值,如图操作:
申请完成后静等后台审核即可,审核通过后会有相应邮件提示。下面是我个人已申请SSL证书的域名:
下载对应域名的SSL证书,解压后Nginx中对应的文件即为我们需要的证书文件:
::: hljs-left
:::
Nginx配置SSL证书
此处默认服务器上已安装部署Nginx,将上述两个文件上传至服务器,目录地址任意;为了方便管理,本人将证书文件统一放在Nginx conf 目录下的 cert 文件夹中。
在++nginx.conf++中配置HTTPS server模块:
- Nginx静态文件访问配置
1 | server { |
- API 接口服务配置
配置中的 proxy_pass http://blog-test; 为代理转发服务,需要另外配置 upstream 模块;
1 | upstream blog-test{ |
小课堂:
以上配置表示访问域名 server_name 为test.lynsite.cn 的请求都将代理转发至 localhost:1234,此处的localhost指的是服务器。
举例:++https://test.lynsite.cn/path++ 经过Nginx实际被代理为 ++localhost:1234/path++;
如果想实现代理后的实际地址为 localhost:1234 的根地址,则修改配置文件中的 ++proxy_pass http://blog-test;++ 为 ++proxy_pass http://blog-test/;++另外,本人将 nginx.conf http 中的 server 模块 配置进行了提取,统一配置在 conf/conf.d/*.conf 中。如图:
- 如上配置完成之后重新加载Nginx配置就可以使用 https://test.lynsite.cn 来访问我们的本地1234端口了,但是我们平常访问哪里会加 https 的前缀,都是直接访问域名,所以这里我们还需要把常用的 80 端口的访问重定向到 443 端口,假设我们想只输入 test.lynsite.cn 就能访问 443端口,那么我们还需要在Nginx中http模块添加 server 模块,具体配置如下所示:
1 | server { |
- 重新加载Nginx配置文件就可以访问了,直接通过域名访问地址栏的地址为自动转换为 https 安全链接。
Nginx启动报错处理
如果前面操作正常,此部分可直接跳过。
启动Nginx或者配置完SSL模块后重新刷新配置文件报错:nginx:[emerg]unknown directive ssl,原因:我们配置这个SSL证书需要引用到nginx的中SSL这模块,然而我们一开始编译的Nginx的时候并没有把SSL模块一起编译进去,所以导致这个错误的出现。
下载Nginx安装包,重新编译
./configure –with-http_ssl_module
注: 执行以上命令出现这个错误(./configure:错误:SSL模块需要OpenSSL库。),原因是因为缺少了OpenSSL,那我们再来安装一个即可执行:yum -y install openssl openssl-devel 等待OpenSSL的安装完成后,再执行 ./configure 即可
执行make命令,但是不要执行make install,因为make是用来编译的,而make install是安装,不然你整个nginx会重新覆盖的。
在我们执行完做命令后,我们可以查看到在nginx解压目录下,objs文件夹中多了一个nginx的文件,这个就是新版本的程序了。首先我们把之前的nginx先备份一下,然后把新的程序复制过去覆盖之前的即可。
1 | cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak //备份,备份可不用执行 |
- 查看ssl模块是否安装成功
1 | cd /usr/local/nginx/ |