🧊

Nginxで特定のURLだけNodeにプロキシするには

久しぶりすぎてNginxの設定の書き方がまったく思い出せない・・。

題名通りです。
全部Nodeでやってもいいんですけど、それはそれで何かと面倒なのでこうするのに落ち着いてます。

静的ファイルは今まで通りApacheやらNginxで、動的なものをプロキシして・・っていうのがやっぱセオリー感あります。

設定

#####################################
# hoge.example.com conf.
#####################################
# Nodeが動いてるサーバーとポート
upstream hogeNodeServer {
    server 127.0.0.1:3000;
}

# http://hoge.example.com/api/ 以降はNodeに流すが、
# それ以外はNginxで返す!
server {
    listen  80;
    server_name hoge.example.com;
    access_log  /var/www/hoge/logs/access.log;
    error_log   /var/www/hoge/logs/error.log;

    # 末尾に / をつけ忘れると、/api しか判定されないので注意!!
    location /api/ {
        proxy_pass http://hogeNodeServer/;
    }

    # あとはいつも通り
    location / {
        root /var/www/hoge/public;
        index index.html;
        break;
    }
}

`upstream`で流すところが重要。
`proxy_pass`でそのまま流そうとすると、`curl`とかでサーバー内で確認する分には動いてるように見えるけど実際にブラウザから叩くとうまくいかなかった。

あとはNodeのアプリで適当にこんなん用意すればいいはず。

// ...
// http://hoge.example.com/api/ のとき
app.get('/', index);
// http://hoge.example.com/api/entry のとき
app.get('/entry', entry);

// ...

以上!