ルーズリーフ

公私におよぶ経験値獲得履歴的ななにか。

Neo4jのWebインターフェイス(HTTP)をNginx(HTTPS)でリバースプロキシした

Neo4j Advent Calendar 2016 2日目

qiita.com

ちょっとNeo4j色は薄めですが、導入方法とかNeo4jのよさなどはみなさんが書いてくださりそうなので、実際に使おうとしたときにちょっとハマったし一発で情報が出てこなかったネタを選びました。
環境構築経験少なくて苦手なのが露呈するからこんな機会じゃなきゃ絶対書かない。

発端

Neo4jのとっても素敵なWebインターフェイスを複数チームで使いたいが、Neo4jのいるサーバーは表に出したくない。
どうもXWindow/XQuartzを使うと設定頑張ってもレスポンスが遅すぎてつらいし、仕方ないので外向けのサーバーからリバースプロキシする。
ついでにユーザー認証もしたい。

構成

[Server1] 外部向けサーバーとして稼働中
CentOS 6.8
Nginx 1.10.1

[Server2] ネットワーク内部のみSSHアクセスを許可して稼働中
CentOS 6.8
Neo4j 2.3.2

手順

Neo4j, Nginx, httpd-tools(Basic認証のため)はインストール済みとして、設定の話に集約します。
もし必要でしたらコメントいただければ作業ログのレベルですが↑も書きます。

1) proxy.conf を作成してリバースプロキシ、HTTPSBasic認証の設定を書く。

$ cd /etc/nginx/conf.d/ # 例
$ vi proxy.conf # お好きなeditorでどうぞ、同じ構成なら[]部分を編集する感じ

## Head
server {
    # HTTPS
    listen 443 default ssl;

    ssl on;
    ssl_certificate [SSL証明書までのpath];
    ssl_certificate_key [SSL秘密鍵までのpath];

    location / {
        # Basic認証
        deny all;
        auth_basic "[Administrator only]";# お好きな名称でどうぞ
        auth_basic_user_file [.htpasswdまでのpath];
        satisfy any;

        # リバースプロキシ
        proxy_pass [Neo4jのアドレス];# http://servername:7474/ とかが多いのかな

        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Authorization "Basic [エンコードしたNeo4jのパスワード]";# ここちょっとハマったし直したい

        proxy_redirect http:// https://;# これ忘れてて一瞬ハマった
        proxy_buffering off;

    }
}
## EOF

2) ユーザーとパスワードを設定する

$ mkpasswd # 硬めのパスワードが欲しかったら使用
$ htpasswd -c [.htpasswdまでのpath] [ユーザー名] # 初回
$ htpasswd [.htpasswdまでのpath] [ユーザー名] # 追加時

3) Nginxの設定をテストする(もし問題があればエラーを見ながら修正)

$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

4) Nginx再起動

$ nginx -s reload

以上。

一度ハマった点

Neo4jのWebインターフェイスを使用するためには、例えば"neo4j"というユーザーとそのパスワードを入力する必要があります。
リバースプロキシをしてしまうので、せっかく認証をしてもその情報をきちんと受け渡さないと、Neo4jの認証エラーで弾かれました。
とりあえずすぐ使えるようにしなければならなかったので、Neo4jのログを見ながらエンコードされたパスワードを拾って入れてしまいました。
時間あるときにちゃんとクッキーなりセッションなりの必要な項目を受け渡すように直します。直せたらここも更新します。
認証情報どこにいるやら...パッと情報が見つからなかった。私の場合経験しながら学ばないと吸収されないので頑張る。

参考文献

gihyo.jp

www.oreilly.co.jp

<Prev Neo4j Advent Calendar 2016 1日目

qiita.com

私が説明書くより断然分かりやすいと思う。

Next> Neo4j Advent Calendar 2016 3日目

qiita.com

早速使ってみたいなーという方必読ですね!
Windowsで構築したことがなかったので、個人的にも重宝します。