petitviolet blog

    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