Executando vários aplicativos Rails sob diferentes sub-URIs para o mesmo domínio usando nginx

2

Consegui configurar com sucesso a nginx e a phus de passageiros. Agora tenho a seguinte configuração

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 }

Agora, quero alterá-lo para a seguinte configuração

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 }

Eu tentei usar a diretiva location, mas não obtive êxito. Eu nem tenho certeza se isso é possível. Qualquer ajuda seria muito apreciada. Obrigado.

Seguem as minhas configurações do 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;
}
}
    
por Naz Mir 06.02.2012 / 10:21

3 respostas

1

Isso é possível usando a diretiva passenger_base_uri do Passenger Phusion. Vamos supor que meu domínio seja www.example.com

Agora, quero executar vários aplicativos de trilhos para os seguintes URIs

www.example.com - Load Rails App1

www.example.com/app2 - Load Rails App2

É assim que meu bloco Server no nginx.conf seria:

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

Veja como a raiz está apontando para a pasta pública do app1. E veja a diretiva passenger_base_uri .

Agora, precisamos executar a etapa final - pasta pública do symlink app2 para /var/www/app1/public/app2 . Isso é feito com o seguinte comando:

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

Depois de criar este link, reinicie o nginx e você estará pronto para atender diferentes aplicativos Rails no mesmo domínio.

Referências: Implantando a Phishing do passageiro em um sub-URI

    
por 18.09.2013 / 10:23
1

Resposta anterior:

 server_name dev.example.com/example1 

está errado. Estou entendendo que você queria dev.example.com para ir para dev.example.com/example1. Para tal caso, você precisa reescrever URL como abaixo

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

Responder após o comentário:

Do seu comentário, entendi que você queria veicular vários aplicativos de trilhos de dentro do mesmo URI / domínio.

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;
}
    
por 06.02.2012 / 10:35
0

Existe uma maneira melhor do que a resposta aceita aqui. Não há necessidade de ligar simbolicamente as pastas.

Implantando um aplicativo em um sub-URI ou subdiretório

Você também pode implantar um aplicativo em um sub-URI em vez do URI raiz. Por exemplo, suponha que você já tenha um host virtual para o aplicativo / websites / phusion:

http {
    ...

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

E você deseja que seu aplicativo, localizado em / websites / secondapp, seja acessado no link do URL . Para fazer isso, você precisa executar o seguinte:

  • Crie um local com o parâmetro ~ ^/<SUBURI>(/.*|$) . Essa é uma expressão regular que diz: "corresponde exatamente a tudo ou começa com /".
  • Dentro do bloco de localização, defina o alias <PATH TO YOUR APPLICATION PUBLIC SUBDIRECTORY>$1 .
  • Dentro do bloco de localização, defina passenger_base_uri <SUBURI> .
  • Dentro do bloco de localização, defina passenger_app_root <PATH TO YOUR APPLICATION ROOT> .
  • Dentro do bloco de localização, defina passenger_document_root <PATH TO YOUR APPLICATIOS PUBLIC SUBDIRECTORY> . Dentro do bloco de localização, defina app_type e startup_file de acordo. Aqui está um exemplo:

    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;
    
            }
        }
    }
    

Quando terminar, reinicie o Nginx. Se você instalou o Nginx através dos nossos pacotes Debian ou RPM:

sudo service nginx restart

Referência: artigo

    
por 16.11.2018 / 10:16