前言
上篇,我们介绍了HTTPS的SSL证书,以及如何通过acme.sh生成并自动更新SSL证书。 本篇,我们介绍如何通过nginx配置配置全站https,以及容易踩的坑
环境
- linux服务器,操作系统为
centos7.2
nginx 1.10.1
acme.sh v2.8.0
本文以msh.com
的域名证书为例
一、给nginx安装ssl模块
想要nginx支持https,必须安装http_ssl_module
模块。该模块如果未安装或安装失败,在配置nginx的https时会报unknown directive "ssl"
的错
首先切换到nginx的安装包目录,然后执行如下命令
####### 下载你当前版本的nginx包,并且解压 进到目录
./configure --with-http_ssl_module
####### 切记千万不要make install 那样就覆盖安装了
make
####### 将原来的nginx备份 备份之前先关闭当前正在执行的nginx
/usr/local/nginx/sbin/nginx -s stop
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
####### make之后会在当前目录生成 objs 目录
cp objs/nginx /usr/local/nginx/sbin/nginx
####### 然后重新启动nginx
/usr/local/nginx/sbin/nginx
复制代码
二、告知nginx你的证书存放的位置
本人指定的证书存放位置为/mycertify/ssl
打开nginx安装目录的nginx.conf
配置文件。因为是泛域名证书
,所以当前域名以及当前域名下的所有次级子域名
可以共用一个证书
# 第一个子域名
server {
# https默认监听的是443 端口
listen 443 ssl;
server_name b.msh.com ;
# 指定证书位置
ssl_certificate /mycertify/ssl/msh.com.cer;
ssl_certificate_key /mycertify/ssl/msh.com.key;
# 下方的5个配置项是和https无关的,如果想让nginx能正常代理websocket,则必须加上
# 防止nginx代理websocket时,每隔75秒自动中断
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
# 防止nginx代理websocket 报错
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
location / {
proxy_pass http://localhost:8585;
}
}
# 其他的同级域名的证书配置,也可以照搬同上这样配置
复制代码
三、强制将HTTP请求转到HTTPS请求
网站虽然升级成为了https,但是客户端可能会依然通过原先的http协议访问。这就需要通过nginx做重定向到https
假如访问路径为 http://b.msh.com
,重定向后的实际访问路径为 https://b.msh.com
server {
listen 80;
server_name b.msh.com www.b.msh.com ;
rewrite ^(.*) https://$host$1 permanent;
}
复制代码
三、 重启nginx,使以上配置生效
/usr/local/nginx/sbin/nginx -s reload
复制代码
注意:到这一步,配置还没有完成!!!。十个人里面有九个到这一步就以为大功告成了,然而却漏掉了不起眼但是最重要的一步,也是很多教程里面所没有提到的,那就是开启防火墙443端口
四、使防火墙放开443端口
开启443端口
firewall-cmd --zone=public --add-port=443/tcp --permanent
复制代码
重启防火墙,切记!!!!!!!!
firewall-cmd --reload
复制代码
至此,大功告成,可以在浏览器里面输入地址测试了
系列文章
全站HTTPS升级系列(二)基于 acme.sh从Letsencrypt生成免费的泛域名证书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
https://juejin.im/post/5c385c0a6fb9a049ac7960be