前言
-
日常开发中我们在公网访问项目时,一般都是安全连接,https://开头(极少数http://)
-
当我们自己配置的域名服务器,通过Nginx转发之后确实http,这是因为我们没有配置证书
-
浏览器会察觉我们的传输没有规范加密,所以认定我们的连接不安全,但并不影响使用
-
其实当域名是我们自己时候,是有相对应免费的ssl证书申请,只是我们自己没有申请
条件须知
-
我的域名是阿里云购买的(进行域名解析),服务器是腾讯云的(轻量云服务器)
-
并且服务器和域名都是进行过备案的,可以正常访问。服务器是Windows镜像
-
来到阿里云进行域名的ssl证书申请,域名ssl证书是一一对应的(二级域名也需要申请)
-
一定要来到服务器,查看https-443端口是否开放-一般默认是开放
实现过程
1.首先我们打开阿里云-登录购买域名账号-点击控制台搜索-数字证书管理服务
2.点击免费证书-第一次需要点击创建虚拟证书(有20个免费的)
3.再次点击创建证书-下面会出现一行-点击右侧证书申请-填写相应信息-提交审核-一般10分钟左右通过会用短信和邮箱通知你
4.下载Nginx方式ssl证书-查看使用文档(审核通过之后-右侧会出现下载按钮)
5.来到服务器nginx-html文件中-创建ssl文件存放证书
6.修改nginx-conf-nginx.conf配置文件
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 这个server负责默认转发到https,配置证书之后,只是http和https都可以访问,但是默认还是http访问
# 这一段是默认https访问-官方文档有讲
server {
listen 80;
#填写证书绑定的域名
server_name 你的域名;
#将所有HTTP请求通过rewrite指令重定向到HTTPS。
rewrite ^(.*)$ https://$host$1;
location / {
index index.html index.htm;
}
}
server {
#listen 80;
#定义服务器的默认网站根目录位置
server_name 你的域名;
# 开启ssl证书-这种写法淘汰-会报错
#ssl on;
# 开启https端口-默认
listen 443 ssl;
# 证书凭证-./相对路径
ssl_certificate ./html/SSL/FW/你的域名.pem;
ssl_certificate_key ./html/SSL/FW/你的域名.key;
# 系统配置-可要可不要
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
#表示优先使用服务端加密套件。默认开启
ssl_prefer_server_ciphers on;
location / {
root html/fw/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html; #解决页面刷新404问题
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
7.使用nginx重启命令来-更新配置
nginx -s reload
8.默认进来是https-安全连接-并且没有报错-说明配置成功
细节
-
ssl证书下载之后放到服务器时,尽量不要改名字(www./没有www.都不影响)
-
在引入证书的时候使用(./)- 相对名字,一定要核对好路径-防止报错
报错合集
1.开启ssl 命令抛弃报错-the ssl directive is deprecated
解决方案-换命令
# 开启ssl证书-这种写法淘汰-会报错
# ssl on;
# 开启https端口-默认-改用下面写法
listen 443 ssl;
2.引入ssl证书路径报错-cannot load certificate
解决方案
检查路径-建议使用 ./ 路径
3.当发现配置完ssl证书-没报错启动成功之后。访问还是http时,是因为没有配置server层-注意
总结:
经过这一趟流程下来相信你也对 Nginx配置ssl证书,加密成https过程细节(the ssl directive is deprecated-cannot load certificate) 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!
什么不足的地方请大家指出谢谢 -- 風过无痕