当前位置:首页 » 编程语言

Nginx配置HTTPS和HTTP

2016-12-03 13:41 本站整理 浏览(5)

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配置

[code]
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 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文档
[code]
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共存。