使用【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,还是从未使用过的,请尝试找到一种便利的使用方法。