VPS正如虚拟机类似,可以用来搭建代理,服务器等,本文介绍支持markdown的jekyll静态博客站点的搭建。

搭建静态博客

使用nginx来作为静态文件服务器,使用jekyll来处理markdown并生成静态博客目录。

安装ruby

yum install ruby
yum install ruby-devel

jekyll && markdown

安装git

yum install git

安装jekyll

gem install jekyll --no-rdoc --no-ri
gem install jekyll-paginate
gem install pygments.rb

更改时区

jekyll会使用本地时间,对于文件时间戳是未来还没有到的时间,jekyll会忽略生成,而北京时间比美国时间早。

timedatectl set-timezone Asia/Shanghai

nginx安装

yum install nginx

控制命令:

配置http静态博客

  1. 因为是root权限,把/etc/nginx/nginx.conf中 user www-data 改成 user root
  2. /etc/nginx/conf.d/ 下添加 blog.conf文件
  3. 如果有自己的域名,在DNS解析中配置好相应的A标记

blog.conf的server配置例子:

server {
    listen 80;

    server_name www.suninf.net;

    root /root/suninf/_site;

    location / {
            index index.html index.htm;
    }

    # pic
    location ~.*\.(jpg|png|jpeg|ico|gif)$  
    {   
        expires 30d;  
    }

    #js css
    location ~.*\.(js|css)?$  
    {   
        expires 24h;  
    } 

    error_page  404  /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}

# 不带www的301跳转
server {
       listen 80;
       server_name suninf.net;
       rewrite ^/(.*) http://www.suninf.net/$1 permanent;
}

配置博客使用https

https可以防止网页内容被广告拦截和篡改,同时https的访问速度也比较快,另外证书和服务器对https的支持都非常简单,个人博客比较适合使用Let’s Encrypt来支持https证书。

安装certbot

letsencrypt目前推荐使用certbot来自动配置和管理证书

yum install certbot

certbot-auto

如果certbot安装或启动失败,可以直接使用certbot-auto工具,安装好后,支持命令参数与certbot一致

wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto
./certbot-auto --help

参考:https://certbot.eff.org/docs/install.html#certbot-auto

certbot申请letsencrypt证书

先停止nginx,然后申请证书(选择cert临时服务)

certbot certonly --agree-to -d www.suninf.net

生成证书路径:/etc/letsencrypt/live/www.suninf.net

通配域名证书申请

certbot certonly --manual --agree-to -d '*.suninf.net'

自动续期

letsencrypt证书有效期只有90天,可以使用crontab进行自动续期:

crontab -e 里加上如下规则:

0 0 1 * * service nginx stop && certbot renew --force-renewal && service nginx restart

这样每个月就会执行一次续期操作。

https的nginx配置

server {
  listen 443 ssl;

  # Make site accessible from http://localhost/
  server_name www.suninf.net;
  
  ssl_certificate /etc/letsencrypt/live/www.suninf.net/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/www.suninf.net/privkey.pem;
  ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m; 

  root /root/suninf/suninf.net/_site;

  location / {
          index index.html index.htm;
    }

  # pic
  location ~.*\.(jpg|png|jpeg|ico|gif)$  
  {   
    expires 30d;  
  }

  #js css
  location ~.*\.(js|css)?$  
  {   
    expires 24h;  
      } 

    error_page  404  /404.html;

  # redirect server error pages to the static page /50x.html
  #
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
    root /usr/share/nginx/html;
  }
}

server {
       listen 80;
       server_name www.suninf.net;
       rewrite ^/(.*) https://www.suninf.net/$1 permanent;
}

server {
       listen 80;
       server_name suninf.net;
       rewrite ^/(.*) https://www.suninf.net/$1 permanent;
}

参考