阅读 1446

全站HTTPS升级系列(三)nginx配置全站HTTPS

前言

上篇,我们介绍了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升级系列(一)升级前的科普工作

全站HTTPS升级系列(二)基于 acme.sh从Letsencrypt生成免费的泛域名证书

全站HTTPS升级系列(三)nginx配置全站HTTPS

全站HTTPS升级系列(四)项目代码升级改造