目录
网站部署ssl证书就是将网站的http协议转换为更加安全的https协议
步骤:
腾讯云和阿里云部署ssl证书流程基本一致
1、腾讯云申请ssl证书(可以免费申请50个,有效期一年;阿里云可以免费申请20个,有效期三个月)
2、下载证书(最好选择nginx服务器,适合大多数服务器)
3、xftp将下载的证书上传到服务器指定的目录下(这里我是上传到nginx的目录下的/usr/share/nginx/cert/xxx)
4、nginx配置对应域名的443端口,开启ssl
5、nginx监听对应域名的80端口返回301强制重定向到该域名下的ssl443端口
上述配置完后直接访问域名(比如haixtx.cn)就会跳转到配置了ssl的443端口(即https://haixtx.cn)
详细说明:
1、腾讯云申请ssl证书
登录腾讯云官网搜索SSL证书
->点击我的证书
->点击申请免费证书
进入申请证书页面选择免费版,然后根据提示一步一步进行(注意一个ssl证书只能对应一个域名/二级域名),在填写域名时填写自己需要绑定ssl的域名,一般情况下申请了几分钟后就会成功
2、下载证书
选择需要部署的ssl证书点击下载,选择nginx服务器
将证书下载到本地后就通过xftp登录服务器准备上传证书
3、xftp将下载的证书上传到服务器指定的目录下
ssl证书下载解压后会有下面四个文件,只需要把.key
和.pem
两个文件上传服务器,nginx部署会用到这两个文件
服务器新建一个文件夹存放证书,我这里新建/usr/share/nginx/cert/xxx来存放上传的证书文件
4、nginx配置对应域名的443端口,开启ssl
xshell登录服务器配置nginx(前提是得下载了nginx),nginx的子配置文件存放在/etc/nginx/conf.d目录下,
在/etc/nginx/conf.d目录下创建cert.conf子配置文件配置haixtx.cn域名的ssl
我这里把博客项目的三个项目对应的域名都配置了ssl,步骤都一样,每个域名单独配置
# /etc/nginx/conf.d/cert.conf
# 配置前台项目ssl
server {
# 服务器端口使用443,开启ssl
listen 443 ssl http2; #开启http2
# 域名,多个以空格分开
server_name haixtx.cn www.haixtx.cn;
# ssl证书地址
ssl_certificate /usr/share/nginx/cert/blog/haixtx.club_bundle.pem; # pem文件的路径
ssl_certificate_key /usr/share/nginx/cert/blog/haixtx.club.key; # key文件的路径
# ssl验证相关配置
ssl_session_timeout 5m; #缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议
ssl_prefer_server_ciphers on; #使用服务器端的首选算法
# 反向代理,根据自己需求配置
location / {
proxy_pass http://101.33.249.237:82;
}
#静态资源缓开启缓存
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
proxy_pass http://101.33.249.237:82;
expires 30d;
# 图片防盗链,防止其它网站利用外链访问我们的图片,有利于节省流量
#valid_referers none blocked server_names ~.google. ~.baidu. *.qq.com; # 只允许本机 IP 外链引用,将百度和谷歌也加入白名单有利于 SEO
#if ($invalid_referer){
# return 403;
#}
}
location ~ .*.(js|css)?$
{
proxy_pass http://101.33.249.237:82;
expires 12h;
}
}
# 配置后台项目ssl
server {
# 服务器端口使用443,开启ssl
listen 443 ssl http2; #开启http2
# 域名,多个以空格分开
server_name admin.haixtx.cn;
# ssl证书地址
ssl_certificate /usr/share/nginx/cert/admin/admin.haixtx.club_bundle.pem; # pem文件的路径
ssl_certificate_key /usr/share/nginx/cert/admin/admin.haixtx.club.key; # key文件的路径
# ssl验证相关配置
ssl_session_timeout 5m; #缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议
ssl_prefer_server_ciphers on; #使用服务器端的首选算法
location / {
proxy_pass http://101.33.249.237:8000;
}
#静态资源缓开启缓存
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
# 这里同样需要反向代理,不然请求路径会是admin.haixtx.cn,会出现404
proxy_pass http://101.33.249.237:8000;
expires 30d;
# 图片防盗链,防止其它网站利用外链访问我们的图片,有利于节省流量
#valid_referers none blocked server_names ~.google. ~.baidu. *.qq.com; # 只允许本机 IP 外链引用,将百度和谷歌也加入白名单有利于 SEO
#if ($invalid_referer){
# return 403;
#}
}
location ~ .*.(js|css)?$
{
proxy_pass http://101.33.249.237:8000;
expires 12h;
}
}
# 配置后端ssl
server {
# 服务器端口使用443,开启ssl
listen 443 ssl http2; #开启http2
# 域名,多个以空格分开
server_name node.haixtx.cn;
# ssl证书地址
ssl_certificate /usr/share/nginx/cert/node/node.haixtx.club_bundle.pem; # pem文件的路径
ssl_certificate_key /usr/share/nginx/cert/node/node.haixtx.club.key; # key文件的路径
# ssl验证相关配置
ssl_session_timeout 5m; #缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议
ssl_prefer_server_ciphers on; #使用服务器端的首选算法
location / {
proxy_pass http://101.33.249.237:3000;
}
#后端图片开启缓存
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
proxy_pass http://101.33.249.237:3000;
expires 30d;
}
}
上面配置完后以https访问对应域名(比如https://haixtx.cn)(443端口)
就可以正常访问到项目了,但是如果直接访问haixtx.cn
还是会默认跳转到http:haixtx.cn(80端口)
,所以下面可以在创建一个nginx子配置文件将http的80端口重定向到https的443端口
注意: https网页内不允许发送http请求,浏览器在https网页中遇到http请求会报错并阻止http请求的发送,所以需要给后端项目也配置ssl证书开启https
5、nginx监听对应域名的80端口返回301强制重定向到该域名下的ssl443端口
新建/etc/nginx/conf.d/proxy.conf
子配置文件重定向http80端口到https的443端口
server{
listen 80;
server_name haixtx.cn;
#反向代理前台
location / {
return 301 https://$server_name$request_uri;
}
}
server{
listen 80;
server_name admin.haixtx.cn;
#反向代理后台管理系统
location / {
return 301 https://$server_name$request_uri;
}
}
server{
listen 80;
server_name node.haixtx.cn;
#反向代理后端
location / {
return 301 https://$server_name$request_uri;
}
}
上面配置完后直接访问haixtx.cn
也会重定向到https://haixtx.cn
,也就是几种访问方式都会跳转到配置了ssl的项目去(开启https)
至此项目部署ssl就完成了
注意: 开启http2的前提是需要开启https,即http->https->http2
nginx开启http2后要重启nginx才能生效
nginx -s stop && nginx
测试HTTP2是否开启成功
- 开启了https的域名下不能再使用http请求了,也就是说开启了https的项目中的所有http请求都需要切换为https,不然会报错
- 如何查看网站是否开启http有两种办法:
1、谷歌浏览器f12开启:Chrome=>F12=>Network=>Tab栏右键点击=>勾选Protocol
2、谷歌浏览器f12控制台输入并运行下面的代码
(function(){
//验证网站是否使用了http2
if(window.chrome && typeof chrome.loadTimes === 'function') {
var loadTimes = window.chrome.loadTimes()
var spdy = loadTimes.wasFetchedViaSpdy
var info = loadTimes.npnNegotiatedProtocol || loadTimes.connectionInfo
if(spdy && /^h2/i.test(info)) {
return console.log('本站点使用了 http2')
}
}
console.warn('本站点未使用 http2')
})()
标签:nginx,证书,开启,server,ssl,haixtx,https,http2
From: https://blog.csdn.net/minusing/article/details/137413273