版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengshizty/article/details/53444040
Nginx配置HTTPS
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer)安全超文本传输协议,是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即将HTTP用SSL/TLS协议进行封装,HTTPS的安全基础是SSL/TLS。
HTTP和HTTPS比较
1、HTTP明文协议的缺陷容易导致数据泄露、数据篡改、流量劫持、钓鱼攻击等安全问题。
2、网页篡改及劫持篡改网页推送广告。
3、HTTP协议无法验证通信方身份,可以伪造虚假服务器欺骗用户。
4、WIFI热点的普及和移动网络的加入,放大了数据被劫持、篡改的风险。
5、HTTPS普遍认为性能消耗要大于HTTP。但是我们可以通过性能优化、把证书部署在SLB或CDN,来解决此问题。
Nginx上部署HTTPS
1、首先我们需要购买证书(或者自己生成证书,但是自己生成的证书是不被其他浏览器和平台所信任的,生成证书参考)
2、如果服务器使用Nginx做均载或者域名代理,需要在nginx配置ssl。
一、Nginx配置ssl所有请求都走HTTPS配置
server {
listen 443; #指定ssl监听端口
server_name *.andy.com;
ssl on; #开启ssl支持
ssl_certificate /etc/nginx/server.pem; #指定服务器证书路径
ssl_certificate_key /etc/nginx/server.key; #指定私钥证书路径
ssl_session_cache shared:SSL:10m; #SSL会话缓存10MB
ssl_session_timeout 10m; #SSL会话超时间10分钟
ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2; #指定SSL服务器端支持的协议版本
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #指定加密算法
ssl_prefer_server_ciphers on; #在使用SSLv3和TLS协议时指定服务器的加密算法要优先于客户端的加密算法
#以下内容请按域名需要进行配置,此处仅供参考
location /test {
proxy_pass http://192.168.1.111:8080/test;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-REAL-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Nginx配置HTTP和HTTPS共存
在大多数情况下,我们有可能为了兼容之前APP或者项目发布的版本(之前都走HTTP请求),需要配置HTTP和HTTPS并存的情况,这时我们需要配置Nginx监听80端口和关闭SSL的强制开启。
nginx参考文档:SSL文档
server {
listen 80; #监听80http请求
listen 443; #指定ssl监听端口
server_name *.andy.com;
ssl_certificate /etc/nginx/server.pem; #指定服务器证书路径
ssl_certificate_key /etc/nginx/server.key; #指定私钥证书路径
ssl_session_cache shared:SSL:10m; #SSL会话缓存10MB
ssl_session_timeout 10m; #SSL会话超时间10分钟
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #指定SSL服务器端支持的协议版本
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #指定加密算法
ssl_prefer_server_ciphers on; #在使用SSLv3和TLS协议时指定服务器的加密算法要优先于客户端的加密算法
#以下内容请按域名需要进行配置,此处仅供参考
location /test {
proxy_pass http://192.168.1.111:8080/test;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-REAL-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
HTTPS的加速配置
如果我们项目中在Nginx上层配置了CDN或SLB等,那么SSL需要加到CDN上,CDN不仅提供图片、请求、静态文件等资源的缓存,而且还提供HTTPS安全加速,让HTTPS在请求性能方面和HTTP一样,自然安全性上更高。下面以阿里云CDN配置HTTPS为例。
首先开启HTTPS
配置HTTPS内容
一般选择跳转方式为HTTP和HTTPS共存。