読者です 読者をやめる 読者になる 読者になる

WordPressプラグイン【Duplicator】でzip archive enabled fail が出た場合の対処(Linux)

パッケージをインストール後、再起動でPassしました。

以下、対処方法。

対処

パッケージをインストールします。

$ sudo apt install sudo apt install php7.0-zip
$ sudo reboot

確認

再度Duplicatorのパッケージ作成画面を見るとrequirementsがpassになりました。

f:id:watarisein:20170504184951p:plain

以上

Nginxでリバースプロキシサーバーを構築する【1つのグローバルIPで複数のドメイン名を振り分ける方法】

1つのグローバルIPしか持っていないが、複数のホスト名で振り分け先を変えたい場合、リバースプロキシを使います。 今回は、Nginxを使ってリバースプロキシを実現する方法について説明します。

Nginxのインストール

$ sudo apt install -y nginx

リバースプロキシの設定

例えば、hoge.co.jpというドメイン名でLAN内の192.168.1.100へアクセスを振り分ける場合

リバースプロキシ用の設定ファイルを作成します。ファイル名は任意で構いません。

$ sudo vi /etc/nginx/sites-available/hoge

server {
    server_name hoge.co.jp;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    location / {
        proxy_pass http://192.168.1.100;
    }
}

設定を有効化します。

$ sudo ln -s /etc/nginx/sites-available/hoge /etc/nginx/sites-enabled/

サービスを再起動します。

$ sudo systemctl restart nginx

サイトを増やす場合は、同様にリバースプロキシの設定を増やしていけばOKです。

P650RG【NG-N-i5910GA1】のHDD【WD10JPVX】をSSD【850 EVO MZ-75E250B】に換装

マウスコンピューターのセールで買ったP650RGには、M.2 SSD(250GB)とHDD(1TB)が搭載されていました。

併用していると、HDDの性能の低さが際立ってしまうので、せめてSSDに換装することにしました。

環境

PC: P650RG【NG-N-i5910GA1】

交換前ストレージ(HDD): WD10JPVX

交換後ストレージ(SSD): 850 EVO MZ-75E250B

交換作業

まずは、PCの裏の蓋を外します。

f:id:watarisein:20170502194438j:plain

左下に固定用のフレームにねじ止めされる形でHDDが収まっています。

側面から見た図。

HDDの固定用フレームをマザーボードに固定しているねじを外してから、HDDを固定しているねじを外し、用意したSSDを固定します。

固定用のフレームを、元会った通り固定します。

f:id:watarisein:20170502201244j:plain

これで蓋を閉じれば完成です。

ベンチマーク

交換前HDD

CrystalDiskInfoで見ると、正常に動作していることがわかります。

f:id:watarisein:20170502200318p:plain

CrystalDiskMarkベンチマークをとった結果です。

f:id:watarisein:20170502200421p:plain

2.5inch HDDなので、こんなものでしょう。

交換後SSD

次に、SSDCrystalDiskInfo。正常に認識しています。

f:id:watarisein:20170502200515p:plain

ベンチマーク結果

f:id:watarisein:20170502200550p:plain

格段に上がりました。

比較

表にまとめると、こんな感じです。

読み込み速度(MB/s)

Seq Q32T1 4K Q32T1 Seq 4K
HDD 119.3 1.388 119.1 0.552
SSD 548.9 198.3 510.9 35.39

書き込み速度(MB/s)

Seq Q32T1 4K Q32T1 Seq 4K
HDD 117.0 1.264 117.6 1.151
SSD 504.2 178.2 475.9 98.75

段違いに上がっています。

ついでに、P650RGに標準搭載のM.2 SSDの速度も計測してみました。

CrystalDiskInfo

f:id:watarisein:20170502203120p:plain

CrystalDiskMark

f:id:watarisein:20170502203142p:plain

恐ろしい速さですね。。

まとめ

P650RG【NG-N-i5910GA1】のHDD【WD10JPVX】をSSD【850 EVO MZ-75E250B】に換装する方法と、ベンチマーク結果(M.2 SSDも)をまとめました。 M.2 SSDの導入もそろそろ本格的に始めようかと思わせる測定結果となりました。

文字の横に水平線を表示するCSSテクニック【サンプルコードあり】

以下のように、文字の横に水平線を出すサンプルコード

f:id:watarisein:20170430225739p:plain

まずはHTML

<h2><span>タイトル</span></h2>

続いてCSS

h2 {
    overflow: hidden;
    text-align: center;
}

h2 span {
    display: inline-block;
    padding: 0 0.5em;
    position: relative;
}

h2 span:before,
h2 span:after {
    border-top: 1px solid;
    content: "";
    position: absolute;
    top: 50%;
    width: 99em;
}

h2 span:before {
    right: 100%;
}

h2 span:after {
    left: 100%;
}

水平線は内側の span 要素の :before と :after の擬似要素を左右に配置して表現しています。 これらに 99emや9999px など充分な幅を持たせ、はみ出した分は外側の h2 要素に指定した overflow: hidden により切り取ります。

以上、文字の横に水平線を描くCSSテクニックでした。

Nginxのリバースプロキシで504 Gateway Timeoutエラー

読み込みに時間がかかるページの場合、初期設定のNginxのリバースプロキシでは504になることがあります。 ここでは、タイムアウトの時間を延ばして、エラーを回避する方法について説明します。

解決策

タイムアウトの時間を延ばします。

$ sudo vi /etc/nginx/conf.d/timeout.conf
proxy_connect_timeout       600;
proxy_send_timeout          600;
proxy_read_timeout          600;
send_timeout                600;

サービスを再起動します。

$ sudo systemctl restart nginx

これでもtimeoutする場合は、タイムアウトの時間を延ばしていきましょう。

まとめ

Timeoutエラーを回避する方法について説明しました。 ただ、タイムアウトが起きること自体問題です。 恒久対処として、遅くなっている原因の分析と対策は別途必要になると思います。

bundle updateやgem installでkakasiをインストールしようとすると"libkakasi is not found"でエラーになる

gemやbundleでkakasiをインストールしようとすると、次のようなエラーが出た。

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory:
/home/hoge/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/kakasi-1.0.2/ext/kakasi-config
/home/hoge/.rbenv/versions/2.3.1/bin/ruby -r
./siteconf20170429-71637-q77g1z.rb extconf.rb
checking fiddle... yes
checking for kakasi... failed -- libkakasi is not found
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/home/hoge/.rbenv/versions/2.3.1/bin/$(RUBY_BASE_NAME)
        --with-kakasi-dir
        --without-kakasi-dir
        --with-kakasi-include
        --without-kakasi-include=${kakasi-dir}/include
        --with-kakasi-lib
        --without-kakasi-lib=${kakasi-dir}/lib

extconf failed, exit code 1

Gem files will remain installed in
/home/hoge/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/kakasi-1.0.2 for
inspection.
Results logged to
/home/hoge/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/extensions/x86_64-linux/2.3.0-static/kakasi-1.0.2/gem_make.out

An error occurred while installing kakasi (1.0.2), and Bundler cannot
continue.
Make sure that `gem install kakasi -v '1.0.2'` succeeds before bundling.

解決方法

kakasiのインストール

こちらを参考 http://satolabo.0t0.jp/2017/03/09/ubuntu-replacement-by-kakasi/

共有ライブラリの更新

$ sudo echo "/usr/local/lib" >> /etc/ld.so.conf.d/usrlocal.conf
$ sudo ldconfig

これで、gem installやbundle updateをすれば、無事にkakasiがインストールされます。

$ bundle update
.
.
Installing kakasi 1.0.2 with native extensions
.
.

リバースプロキシを使って1つのグローバルIPアドレスで複数のウェブサーバーへ振り分ける【UbuntuでNginxのリバースプロキシを設定する】

自宅で複数のウェブサーバーなどを運用するようになり、ウェブサーバーごとにドメインを設定したくなりました。

今まで公開したいウェブサーバーが1台だったので、ルーターのポートフォワードで運用していました。 ルーターのポートフォワード設定だと、WAN側のポートとLAN側のサーバーのIPアドレス・ポートを紐付けています。 そのため、ウェブサーバーで絶対的に使われる80番ポートが割当可能なサーバーは1台のみで、2台目以降はポートを変える必要があり、運用の観点で現実的ではありません。

そこで、アクセスされるホスト名でウェブサーバーへの振り分けを行う方法を探していたらリバースプロキシが最もメジャーな方法でした。

今回は、リバースプロキシの概要と、Ubuntu環境へのインストール・設定方法について説明します。

リバースプロキシとは

一般的に、クライアントがウェブサーバーへアクセスすると、ルータがウェブサーバへリクエストを直接振り分けてウェブサーバーがクライアントへ直接応答を返していました。。

リバースプロキシは、クライアントとウェブサーバの間に立って要求を代理で処理します。

この時、ウェブサーバはクライアントではなくリバースプロキシに応答を返し、リバースプロキシがクライアントに応答を返します。

間にリバースプロキシが挟まることによるメリットを以下に記載します。

リバースプロキシのメリット

簡単に言うと、アクセス速度が向上します。

リバースプロキシの代表格NginxやApacheSquidなどには、キャッシュが用いられています。 1度目のアクセスで、リバースプロキシサーバーからウェブサーバーへリクエストを発行し、結果をリバースプロキシサーバーにキャッシュします。 2度目以降のリクエストは、リバースプロキシサーバーのキャッシュを返すため、応答速度が向上します。

次章から、Nginxのインストールから、リバースプロキシの設定方法について説明します。

Nginxによるリバースプロキシ設定

環境

  • OS: Ubuntu 16.04 Server Edition
  • サーバー構成
    • リバースプロキシサーバー(rproxy/192.168.1.10)
    • ウェブサーバーA(serverA/192.168.1.100/a.com)
    • ウェブサーバーB(serverB/192.168.1.200/b.com)

インストール手順

リバースプロキシサーバーにNginxをインストールします。

$ sudo apt-get install nginx

インストールされたnginxのバージョンを確認します。

$ nginx -v
nginx version: nginx/1.10.0 (Ubuntu)

リバースプロキシの設定

リバースプロキシサーバーにおいて、Nginxの設定ファイルを編集します。

ウェブサーバーAに振り分ける設定

リバースプロキシを設定します。

$ sudo vi /etc/nginx/sites-available/web_serverA
server {
    server_name serverA.example.com; #クライアントがアクセスするURL
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    location / {
        proxy_pass http://192.168.1.100; #ウェブサーバーAのIPアドレス(/etc/hostsに記載しているホスト名も可)
    }
}

設定ファイルを有効化します。

$ sudo ln -s /etc/nginx/sites-available/web_serverA /etc/nginx/sites-enabled/

ウェブサーバーBに振り分ける設定

リバースプロキシを設定します。

$ sudo vi /etc/nginx/sites-available/web_serverB
server {
    server_name serverB.example.com; #クライアントがアクセスするURL
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    location / {
        proxy_pass http://192.168.1.200; #ウェブサーバーBのIPアドレス(/etc/hostsに記載しているホスト名も可)
    }
}

$ sudo ln -s /etc/nginx/sites-available/web_serverB /etc/nginx/sites-enabled/

設定の反映

以下のコマンドで設定を反映します。

$ sudo systemctl reload nginx

エラーがでた場合は、設定ファイルを見直して、再度上記コマンドを実行してください。

アクセス確認

server_nameに設定したアドレスにアクセスして、それぞれのウェブサーバーのページが表示されていれば、正しく設定されています。

まとめ

Nginxによるリバースプロキシ設定手順について説明しました。 リバースプロキシを使えば、1つのグローバルIPアドレスで、複数サーバーへの振り分けが実現可能です。