β

nginx 上配置 https 服务

遗落岛 212 阅读

0x00 申请 ssl 证书

站点要配置 https,就需要去可以发放证书的机构申请 ssl 证书,我选择的是 namecheap 的 positivessl,因为 github education pack,第一年免费。
(具体的申请过程可以参考这里:Namecheap购买的PositiveSSL证书激活使用教程
这里记录一下生成 2048 位 csr 的过程

openssl req -nodes -newkey rsa:2048 -keyout qiuhou_me.key -out qiuhou_me.csr

在这个过程中,会询问一些信息,其中关于 Common Name 这里一定要填写自己要配置的网站的域名,因为服务商在解析了我们提供的 csr 文件后,下发的 ssl 证书就是绑定到这个域名上的。

其他内容参考上面说的链接中的内容,别人已经说的够详细了,我就不重复了。

0x01 设置证书

收到 服务商发来的证书后,是四个文件,我们需要做的是,合并这四个文件为一个文件,比如取名叫 qiuhou.crt。
www_qiuhou_me.crt COMODORSADomainValidationSecureServerCA.crt AddTrustExternalCARoot.crt COMODORSAAddTrustCA.crt
cat www_qiuhou_me.crt > qiuhou.crt
cat COMODORSADomainValidationSecureServerCA.crt >> qiuhou.crt
cat AddTrustExternalCARoot.crt >> qiuhou.crt
cat COMODORSAAddTrustCA.crt >> qiuhou.crt

0x02 配置 nginx

我的服务端配置是 nginx 反代了 tornado 编写的 web server,所以这里配置时,需要注意三点:

所以我的配置文件如下(这里可以参考 introduction to tornado):
这里 qiuhou.crt 既是 0x01 中合并后的服务商提供的证书文件, qiuhou.key 即是0x00 中自己生成的私钥 key。

http {
    upstream qiuhou {
        server 127.0.0.1:9123 ;
    }
    include /etc/nginx/mime.types;
    access_log /var/log/nginx/access.log;
    keepalive_timeout 65;
    proxy_read_timeout 200;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    gzip on;
    gzip_min_length 1000;
    gzip_proxied any;
    gzip_types text/plain text/css text/xml application/x-javascript application/xml application/atom+xml text/javascript;
    proxy_next_upstream error;
    server{
        listen 80;
        server_name qiuhou.me;
        rewrite /(.*) https://www.qiuhou.me/$1 redirect;
    }
    server{
        listen 443;
        server_name www.qiuhou.me;
        ssl on;
        ssl_certificate /etc/nginx/sslkey/qiuhou.crt;
        ssl_certificate_key /etc/nginx/sslkey/qiuhou.key;
        ssl_session_timeout 5m;
        location / {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://qiuhou;
        }
    }
}

0x02 测试

nginx -t
nginx -s reload
打开 https://www.qiuhou.me 测试是否正常打开。

0x03 完。

作者:遗落岛
1、记录技术学习、软件折腾过程中遇到的坑以及解决的办法; 2、翻译国外关于web安全、开源软件、linux小技巧等内容;
原文地址:nginx 上配置 https 服务, 感谢原作者分享。