/ 技术笔记

Nginx全站Https跳转配置

Nginx全站Https跳转配置

这是一个过得糟糕透顶的周末。被一个Nginx配置强制全站https访问的问题折腾着,花上了不少时间去研究测试。当你实现以后发现其实也不过如此,简单容易。

关键地方在于带www和不带www的域名都是需要生成不同证书。

其实这个问题在前段时间启用了https以后一直都没有解决,启用Https是没有问题,但是如何更顺更完美的做好,则需要学习和花时间折腾,全站Https没想象的那么简单。

除了跳转配置,还要折腾配合着上http2,在全站启用Https才显得理想,还有压缩等,有很多坑需要去填。

关于全站Https跳转配置,我想要实现的需求是,即全站域名都指向一个「https://www.sungz.com」:

http://sungz.com -> https://www.sungz.com
https://sungz.com ->https://www.sungz.com
http://www.sungz.com ->https://www.sungz.com

实现的跳转的配置

server { 
listen 80; 
listen 443 ssl http2; 
server_name www.sungz.com sungz.com ; 

ssl_certificate /etc/letsencrypt/live/www.sungz.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.sungz.com/privkey.pem;
#    ssl_session_timeout  5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers   on;
ssl_ciphers AES128:AES256:GCM:!DH:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS; #加密算法 
# enable HSTS including subdomains
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
if ($ssl_protocol = "") { return 301 https://$server_name$request_uri; } 
if ($host != 'www.sungz.com' ) { return 301 https://www.sungz.com$request_uri; }
}