web-dev-qa-db-ja.com

nginxを使用して、同じドメインの異なるサブURIで複数のRailsアプリを実行する

Nginxとpassengerphusionを正常に構成できました。私は今、次の構成を持っています

server {listen 80  server_name **sub1.example.com** root /home/user/app1/public }    
server {listen 80  server_name **sub2.example.com** root /home/user/app2/public }

さて、次の構成に変更したい

server {listen 80  server_name **dev.example.com/example1** root /home/user/app1/public }
server {listen 80  server_name **dev.example.com/example2** root /home/user/app2/public }

Locationディレクティブを使用しようとしましたが、成功しませんでした。これが可能かどうかさえわかりません。どんな助けでも大歓迎です。ありがとう。

以下は私のnginx.conf設定です

server {
   listen 80;
   server_name dev.example.com;

location = /app1/ {
   root /home/Rails/app1/public/; 

   passenger_enabled on;
   Rails_env development;
}
location /app2/ {
   root /home/Rails/app2/public/; 
   passenger_enabled on;
   Rails_env development;
}
}
2
Naz Mir

これは、PassengerPhusionのpassenger_base_uriディレクティブを利用することで可能になります。私のドメインがwww.example.comであると仮定しましょう

ここで、次のURIに対して複数のRailsアプリケーションを実行したい

www.example.com-ロードRails App1

www.example.com/app2-ロードRails App2

Nginx.confのサーバーブロックは次のようになります。

server {
      listen 80;
      server_name  www.example.com;
      root /var/www/app1/public;   
      passenger_enabled on;
      passenger_base_uri /app2;
}

ルートがapp1のパブリックフォルダーをどのように指しているかを確認します。そして、passenger_base_uriディレクティブを見てください。

ここで、最後のステップを実行する必要があります-symlinkapp2のパブリックフォルダーを/var/www/app1/public/app2にリンクします。これは、次のコマンドを実行することによって実行されます。

ln -s /var/www/app2/public /var/www/app1/public/app2

このリンクを作成したら、nginxを再起動すると、同じドメインでさまざまなRailsアプリを提供する準備が整います。

参照: Passenger PhusionをサブURIにデプロイする

1
Naz Mir

前の回答:

 server_name dev.example.com/example1 

間違っている。 dev.example.comをdev.example.com/example1に移動させたいとのことですが。そのような場合は、以下のようにURLを書き換える必要があります

location = / { rewrite ^ http://dev.example.com/example1 ; }

コメントの後に答えてください:

あなたのコメントから、同じURI /ドメイン内から複数のRailsアプリを提供したいことがわかりました。

server {
    listen 80;
    server_name dev.example.com;
    root /home/user/app1/public;
    passenger_enabled on;
    passenger_base_uri /app2;
    passenger_base_uri /app3;
    ....truncated...
    Rails_spawn_method smart;
    Rails_env production;
}
1
kaji

ここで受け入れられた答えよりも良い方法があります。フォルダをシンボリックリンクする必要はありません。

サブURIまたはサブディレクトリへのアプリのデプロイ

ルートURIの代わりにサブURIにアプリをデプロイすることもできます。たとえば、アプリケーション/ website/phusionの仮想ホストがすでにあるとします。

_http {
    ...

    server {
        listen 80;
        server_name www.phusion.nl;
        root /websites/phusion/public;
        passenger_enabled on;
    }
}
_

また、/ website/secondappにあるアプリケーションにURL http://www.phusion.nl/subpath からアクセスできるようにする必要があります。これを行うには、以下を実行する必要があります。

  • パラメータ~ ^/<SUBURI>(/.*|$)を使用して場所を作成します。これは、「正確に、または/で始まるすべてに一致する」という正規表現です。
  • ロケーションブロック内で、エイリアス_<PATH TO YOUR APPLICATION PUBLIC SUBDIRECTORY>$1_を設定します。
  • ロケーションブロック内で、passenger_base_uri _<SUBURI>_を設定します。
  • ロケーションブロック内で、passenger_app_root _<PATH TO YOUR APPLICATION ROOT>_を設定します。
  • ロケーションブロック内で、passenger_document_root _<PATH TO YOUR APPLICATIOS PUBLIC SUBDIRECTORY>_を設定します。ロケーションブロック内で、それに応じてapp_typeとstartup_fileを設定します。次に例を示します。

    _http {
    ...
    
    server {
        listen 80;
        server_name www.phusion.nl;
        root /websites/phusion/public;
        passenger_enabled on;
    
        # This block has been added.
            location ~ ^/subpath(/.*|$) {
                alias /websites/secondapp/public$1;  # <-- be sure to point to 'public'!
                passenger_base_uri /subpath;
                passenger_app_root /websites/secondapp;
                passenger_document_root /websites/secondapp/public;
                passenger_enabled on;
    
            }
        }
    }
    _

完了したら、Nginxを再起動します。 DebianまたはRPMパッケージを介してNginxをインストールした場合:

_Sudo service nginx restart_

参照: 記事

0
rajdeep26