in Nginx ~ read.

在nginx上配置https

本文地址:https://chihoc.com/nginx-with-https/
欢迎转载,请注明出处,谢谢

因为苹果下一年要强制使用ATS,网络连接时必须使用https私密连接。
问题来了:首先你要配置一个使用https的服务器

先用我的个人主页试试水,我的版本信息:
--VPS:Linode
--操作系统版本:64位的CentOS 6
--nginx版本:1.10.1(yum安装)

申请证书

SSL证书需要向国际公认的证书证书认证机构(简称CA,Certificate Authority)申请。
CA机构颁发的证书有3种类型:
域名型SSL证书(DV SSL):信任等级普通,只需验证网站的真实性便可颁发证书保护网站;
企业型SSL证书(OV SSL):信任等级强,须要验证企业的身份,审核严格,安全性更高;
增强型SSL证书(EV SSL):信任等级最高,一般用于银行证券等金融机构,审核严格,安全性最高,同时可以激活绿色网址栏。
-- 知乎 @李是个好人

StartSSL颁发的证书已经被Mozilla定位不信任证书,我已经重新申请GeoTrust的证书

因为只是个人用的证书,所以我使用了StartSSL免费DV证书(一年有效)就足够了。
国内外都有不少的免费DV证书,google一下就能找到不少。

StartSSL采用的是免密登录,所以要先申请账号并制作sign-in证书,当然你也可以使用发一次性密码到邮箱登录。

下载证书并登录到个人中心后选择"Certificates Wizard",选择"DV SSL Certificate"。

这时候添加一个新的域名,需要证明你是该域名拥有者,因此需要发送验证邮件到xxx@your-domain.com。
如果没有相应的邮箱,到腾讯企业邮箱去申请一个,按照文档在域名解析那添加一条记录就好了。

按照它给的命令(需要按照openssl)生成一个证书签发请求,把内容复制进来。

申请成功后可以得到一个crt证书文件,跟key密钥文件一同上传到vps(路径可以自己定)

scp ~/Downloads/chihoc.key root@ip-address:/etc/nginx/ssl/chihoc.key
scp ~/Downloads/chihoc.crt root@ip-address:/etc/nginx/ssl/chihoc.crt

nginx配置
打开nginx配置文件:vi conf.d/ghost.conf插入:

listen 80;
listen 443 ssl; //端口监听
server_name www.chihoc.com; //改为你的域名
keepalive_timeout 70; //超时时间
//我这里是ghost反向代理
location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://127.0.0.1:2368;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

ssl_certificate /etc/nginx/ssl/chihoc.crt;
ssl_certificate_key /etc/nginx/ssl/chihoc.key;
ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers         HIGH:!aNULL:!MD5;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";

我这里是用全局的监听,事实上https加载会比http慢,如果有需要的话可以在配置文件做不同的策略。
例如让一般页面使用http,登录或者iOS客户端接口等使用https。

然后重启nginx

强制跳转https
如果想用户加载http时强制跳到https,可以在nginx配置中修改:

server {
        listen 80;
        server_name www.chihoc.com;
         location / {
                root /var/www/redirect/;
        }
        error_page  404 https://www.chihoc.com/;
}
server {
        listen              443 ssl;
        server_name www.chihoc.com;
        keepalive_timeout   70;
        location / {
                proxy_set_header   X-Real-IP $remote_addr;
                proxy_set_header   Host      $http_host;
                proxy_pass         http://127.0.0.1:2368;
                proxy_set_header REMOTE-HOST $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
        error_page  404 https://www.chihoc.com/;

        ssl_certificate /etc/nginx/ssl/chihoc.crt;
        ssl_certificate_key /etc/nginx/ssl/chihoc.key;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;
        add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
}

http跳到指定的一个redirect项目中,404页面则是直接https页面。
事实上这个项目只有一个index.html文件:

<html>
<meta http-equiv="refresh" content="0;url=https://www.chihoc.com/">
</html>

加载html之后会自动刷新重定向到https://www.chihoc.com/