blog.petitviolet.net

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

2015-07-29

QiitaHTTPさくらVPSh2o

流行りの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 にはならなかったが、ひとまず動かすという目的は果たせた

from: https://qiita.com/petitviolet/items/7881424584b461787f62