nginx
Sinatra

sinatraをサブディレクトリ(sub uri)で動かす

More than 1 year has passed since last update.

先に結論

sinatraに飛ばすloationの中で、リクエストURIルートを差し替えておく。
以下、ningx.confの抜粋

location /subdir/ {
  rewrite /subdir/(.*) /$1  break; #ここでURLを差し替える
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;
  proxy_pass http://supapp;  #upstream で定義したドメインソケットにプロキシ
}

こう書いていいこと

http://domain/subdir/

とアクセスされても、

get '/' do

で、受け取れるようになる。配置するディレクトリ(実際にはサブURI)によって、アプリのソースを書き換えないでいい。

副作用

htmlの中に、
src="/js/xxxx.js"
なんて書いてると、やっぱりディレクトリがずれちゃうので、そういうことをしたかったら、Railsみたいな、フルスペックのフレームワークに頼った方がよくなる。Railsでもサブディレクトリをつかうのはちょっと面倒。

nginxとアプリケーションサーバを使いたいのなら、アプリケーション単位でルートを切るのが無難。公開ディレクトリにフォルダ解凍するだけで別アプリが配置できるのは、Apche+phpの特殊機能と割り切った方がいい。