HTTP
さくらVPS
h2o

h2oをリバースプロキシとして導入してみた

More than 3 years have passed since last update.

流行りのh2o/h2oをインストールして動かしてみた

Apacheがすでに動いていてその上でPHPとかuwsgiとか動いていたので、今回はリバースプロキシとして導入することにした


環境

さくらVPS

$ cat /etc/redhat-release

CentOS release 6.6 (Final)
$ uname -r
2.6.32-504.3.3.el6.x86_64


インストール

Install - H2Oに書いてある

yumで提供されているっぽいこと書いてあったのでやろうとしたがだめだった

$ sudo yum install h2o

読み込んだプラグイン:downloadonly, fastestmirror, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
* base: ftp.nara.wide.ad.jp
* extras: ftp.nara.wide.ad.jp
* updates: ftp.nara.wide.ad.jp
パッケージ h2o は利用できません。
エラー: 何もしません

というわけで、ソース落としてきて手元でビルドした

手元の環境にはcmakeが入っていなかったので

sudo yum -y install cmake

していれた


ダウンロードからインストール

wget https://github.com/h2o/h2o/archive/v1.4.2.tar.gz

cmake -DWITH_BUNDLED_SSL=on .
make
sudo make install

これで/usr/local/bin/h2oに実行ファイルが格納される


設定ファイル

Quick StartProxy Directivesを参考にした


/etc/h2o/reverse_proxy.conf

user: nobody

hosts:
"My own host":
listen:
port: 80
paths:
"/":
proxy.reverse.url: http://127.0.0.1:8080/
"/assets":
file.dir: /path/to/assets/
access-log: /path/to/log/access_log
error-log: /path/to/log/error_log

pid-fileはとりあえず消した

リバースプロキシのためにproxy.reverse.urlを設定する

もちろん、もともと動いていたApacheのポートを8080に変更し、iptablesで8080を開ける作業が必要となる

これだけでいいのめっちゃ楽


動かす

CentOS/サービスの登録 - wiki.aokix.comをかなり参考にして起動スクリプトを書く

chkconfigのランレベルはapacheのものを拝借している

今回は雑にstarth2oを実行して、stoppkill h2oする、みたいなものとした

statusとかreloadもとりあえずいらないので削除


/etc/rc.d/init.d/h2o

#!/bin/bash

#chkconfig: 2345 85 15
#descpriction: h2o Web Server

# source function library
. /etc/rc.d/init.d/functions

RETVAL=0
SERVICE_NAME=`basename $0`

start() {
echo -n $"Starting : $SERVICE_NAME"
/usr/local/bin/h2o -c /etc/h2o/reverse_proxy.conf &
RETVAL=$?
if [ $RETVAL == 0 ]; then
success
else
failure
fi
echo
}

stop() {
echo -n $"Stopping $SERVICE_NAME: "
pkill h2o
RETVAL=$?
if [ $RETVAL == 0 ]; then
success
else
failure
fi
echo
}

case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
esac

exit $RETVAL


これでsudo chkconfig --add h2oすれば、以下のようにしてserviceを使って起動・停止出来るようになる


h2oの起動/停止

sudo service h2o start

sudo service h2o stop

最後に疎通確認でcurl --head <your host>して


Server: h2o/1.4.2


となっていれば終了

証明書とってなかったりでhttp2にはならなかったが、ひとまず動かすという目的は果たせた