使用【Object Storage × Nginx】的方式创建博客

这篇文章是 NIFTY Advent Calendar 第二天的文章。
第一天是fuku2014的 “【Swift × Node.js】在服务器架构中实施抽奖功能”,第三天是yaaamaaaguuu的 “为了改进传统PHP所做的三个举措(由新员工自己进行)”。

概述

我使用 NIFTY CLOUD 的对象存储和 Nginx 构建了一个博客。
在此过程中,我将对象存储用作 Web 服务器的后端,并介绍了使用方法。

尽管Nifty Cloud对象存储可以独立进行静态内容的存储和分发,但作为Web内容分发服务器,它的功能有些不足。
因此,我们将内容放入对象存储中,并将Nginx设置为反向代理服务器放在前端。
通过这样做,我们可以根据用户的请求从对象存储中获取内容并返回响应,还可以在Nginx服务器内缓存访问频率较高的内容。

介绍成果展示

http://blog.conhumi.net/是我们构筑的新博客。
虽然文章数量还不多,但我们希望逐渐增加。

准备

文章的准备

我正在準備博客文章。
可以自己撰寫HTML和CSS,但也有一種稱為靜態網站生成器的工具,可以從markdown等格式輸出漂亮的博客頁面。
在我上述的博客中,我使用了用Go語言實現的靜態網站生成器Hugo。

使用任何方法创建文章,并准备好包含HTML、CSS、JavaScript等文件的文件组。

将数据上传到对象存储

将文章存储到对象存储中。
由于NIFTY Cloud对象存储与Amazon的Simple Storage Service(S3)的API兼容,因此可以方便地使用S3工具从用于创建文章的个人电脑上传到对象存储中。

以下はAWS CLIを使用して記事をアップロードする例です。以「ニフティクラウドのコントロールパネルでアクセスキーとシークレットキーを確認しておき、」

$AWS_ACCESS_KEY_ID
$AWS_SECRET_ACCESS_KEY

我会将其设置为一个名为「環境変数」的变量。

假设文章存储在./contents/中,

aws --endpoint-url http://jp-east-2.os.cloud.nifty.com s3 sync --delete contents/ s3://blogbucket/

通过该命令,contents/文件夹下的所有文章将被上传到对象存储的blogbucket桶内。由于使用了sync子命令,所以从第二次开始,会自动上传和删除以使contents/文件夹和blogbucket桶内的内容保持一致,非常方便呢。

准备Nginx服务器

为了与对象存储进行配合,需要建立Nginx服务器。

使用NIFTY Cloud,轻松搭建服务器。在上述博客中,我们使用NIFTY Cloud提供的CentOS 7.1服务器。

以下是创建服务器的方法

Nginx和对象存储的协作

如果在对象存储端将内容设置为公开并保存,只需使用Nginx的代理功能即可轻松协作。然而,这样做的话,即使不通过Nginx也可以访问对象存储的内容,可能会感觉不便之处很多。

因此,介绍了在对象存储中将内容设置为非公开,并通过Nginx解析签名来实现协作的方法。

我已经按照以下方式配置和构建了Nginx。
请根据需要适当添加所需的模块。

# export LUAJIT_LIB=/usr/local/lib
# export LUAJIT_INC=/usr/local/include/luajit-2.0

# ./configure \
    --prefix=/usr/local/nginx \
    --conf-path=/etc/nginx/nginx.conf \
    --pid-path=/var/run/nginx.pid \
    --lock-path=/var/run/nginx.lock \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --with-pcre=/usr/local/src/pcre-8.39 \
    --with-zlib=/usr/local/src/zlib-1.2.8 \
    --with-openssl=/usr/local/src/openssl-1.0.2h \
    --with-http_ssl_module \
    --with-stream_ssl_module \
    --with-ld-opt="-Wl,-rpath,/usr/local/lib" \
    --add-module=/usr/local/src/ngx_devel_kit-0.3.0 \
    --add-module=/usr/local/src/headers-more-nginx-module-0.31 \
    --add-module=/usr/local/src/lua-nginx-module-0.10.6 \
    --add-module=/usr/local/src/set-misc-nginx-module-0.31

# make

以下是将Nginx配置为对象存储的前端服务器,并解决代理和身份验证问题的设置。(仅限服务器上下文。)

server {
    listen      80;
    server_name <WEB Page Domain>;

    charset utf-8;

    more_clear_headers  'x-amz-*';
    more_clear_headers  'ETag';

    location / {

        set $os_backend     'jp-east-2.os.cloud.nifty.com';
        set $os_bucket      '<BUCKET_NAME>';
        set $os_access      '<ACCESS_KEY>';
        set $os_secret      '<SECRET_KEY>';
        set $url_full       $uri;
        set_by_lua $now     "return ngx.cookie_time(ngx.time())";
        set $string_to_sign "$request_method\n\n\n\nx-amz-date:${now}\n/$os_bucket$url_full";
        set_hmac_sha1       $os_signature  $os_secret   $string_to_sign;
        set_encode_base64   $os_signature  $os_signature;

        proxy_ignore_headers Cache-Control;
        proxy_set_header    Host    $os_bucket.$os_backend;
        proxy_set_header    x-amz-date  $now;
        proxy_set_header    Authorization 'AWS $os_access:$os_signature';

        resolver    8.8.8.8;

        proxy_pass http://$os_bucket.$os_backend$uri;
    }

}

将上述配置写入nginx.conf等文件后,可以将Nginx配置为作为代理,根据收到的请求从对象存储中获取对象并返回给客户端。

总结

我使用对象存储和Nginx构建了一个简单的网站.

参考画像

此外,通过将Nginx代理服务器部署在每个NiftyCloud地区,还可以考虑将其用作简单的CDN。
通过结合对象存储和NiftyCloud的其他功能,可以想出各种不同的应用方法。

无论您已经使用过Nifty Cloud,还是从未使用过的,请尝试找到一种便利的使用方法。

广告
将在 10 秒后关闭
bannerAds