给闲置VPS增加点用处系列
Nginx Nginx相关安装配置参照我的上一篇关于Nginx配置的文章
Hexo 部署至Nginx 一般有三种方法
git hook方式 配置服务器环境 安装git并创建仓库,设置git hook
1 2 3 4 apt-get install git -y mkdir <git工作目录> && cd <git工作目录> git init --bare nano <git工作目录>/hook/post-reveive
将以下内容修改好放入post-reveive
中
1 2 3 4 5 6 7 8 #!/bin/bash GIT_REPO=/var/www/blog.git TMP_GIT_CLONE=/tmp/blog PUBLIC_WWW=/var/www/blog rm -rf ${TMP_GIT_CLONE} git clone $GIT_REPO $TMP_GIT_CLONE rm -rf ${PUBLIC_WWW} /* cp -rf ${TMP_GIT_CLONE} /* ${PUBLIC_WWW}
或使用如下命令放入post-reveive
中:
1 2 git --work-tree=/var/www/blog --git-dir=/var/www/blog.git checkout -f
赋予执行权限
在本机配置 在博客目录下运行下面命令,安装 git 部署工具。
1 $ npm install hexo-deployer-git --save
修改博客的配置文件 _config.yml,修改deploy选项:
1 2 3 4 deploy: type : git repository: 用户名@服务器地址:/var/www/blog.git branch: master
开启站点HTTPS https需要授权证书,这里使用的是Let’s Encrypt 家的免费证书。
对了,要开启HTTPS首先你得有个人域名,因为证书是给域名授权的。至于域名申请,万网之类的都行,然后解析指向你的服务器。
配置过程 安装
1 apt-get install letsencrypt
获取证书
根据提示完成获取,中间需要输入你的域名,最后出现:
1 2 3 4 5 6 7 8 9 10 - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/<你的域名>/fullchain.pem. Your cert will expire on 2017-09-17. To obtain a new or tweaked version of this certificate in the future, simply run certbot-auto again. To non-interactively renew *all* of your certificates, run "certbot-auto renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
就成功了,看提示,所有的证书文件在 /etc/letsencrypt/live/你的域名
下,里面有下面几个文件证书文件,引用别人的解释下:
这是私匙,对应 Nginx 的 ssl_certificate_key 选项,或者 Apache2 的 SSLCertificateKeyFile 选项。
服务器证书,这个只有 Apache2 低于 2.4.8 版本需要,对应 SSLCertificateFile 选项。
除服务器证书之外的所有证书,对于 1.3.7 版以上的 Nginx 对应 ssl_trusted_certificate 选项,对于低于2.4.8 的 Apache2 对应 SSLCertificateChainFile 选项。
包括上面的服务器证书和其他证书, Nginx 对应 ssl_certificate 选项,2.4.8 版以上的 Apache2 对应 SSLCertificateFile 选项。
如果是 Nginx,需要上面的 privkey.pem(对应 ssl_certificate_key 选项)和 fullchain.pem (对应 ssl_certificate 选项),还需要一个 dhparam.pem(对应 ssl_dhparam 选项) 需自己生成:
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
这个文件创建稍微需要一点时间,注意看我的路径,我的是在 /etc/nginx/ssl/ 下,如果没有ssl这个目录就自己建一个,当然你换其他地方也行。
有了这三个文件: privkey.pem
、fullchain.pem
、dhparam.pem
就可以配置 Nginx 了。
配置Nginx 编辑 /etc/nginx/conf.d/xx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 server { listen 80; server_name binlv.top; return 301 https://$server_name $request_uri ; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name binlv.top; server_tokens off; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-XSS-Protection "1; mode=block" ; ssl_certificate /etc/letsencrypt/live/binlv.top/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/binlv.top/privkey.pem; ssl_dhparam /etc/nginx/ssl/dhparam.pem; ssl_session_cache shared:SSL:50m; ssl_session_timeout 1d; ssl_session_tickets off; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA' ; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; location / { root /var/www/blog; index index.php index.htm index.html; } }
更新配置后要重启一下Nginx
设置证书自动更新 Let’s Encrypt SSL 免费证书为短期证书,只有 90 天期限,提示到期前可以运行命令 letsencrypt renew
续期
实现定时更新证书,我们可以用linux自带的定时器crontab
输入:
1 2 30 2 1 * * /usr/bin/letsencrypt renew >> /var/log /letsencrypt/le-renew.log 35 2 1 * * /usr/bin/systemctl reload nginx
取消授权 如果想把授权的域名取消该怎么办呢?因为免费证书如果不定期更新的话几个月就会自动过期,所以删掉本地部署时对应创建的几个文件就行啦。
1 2 3 rm -rf /etc/letsencrypt/live/www.example.com/ rm -rf /etc/letsencrypt/archive/www.example.com/ rm /etc/letsencrypt/renewal/www.example.com.conf
参考文档 很多。。。
本文完。