Proxy reverso e subdomínios Nginx

4

Eu tenho algum problema com a configuração do Nginx. Eu já pesquisei um problema, mas as soluções propostas que vi não funcionaram para mim.

Eu tenho alguns aplicativos em um servidor tomcat e alguns aplicativos em um servidor jboss. Eu configurei em outro servidor Nginx como proxy reverso e funciona corretamente. Agora, o que eu faria é ter acesso aos aplicativos no tomcat e jboss usando nomes de domínio. Por exemplo. Eu tenho apps no tomcat para este endereço: tomcat.domain.com:8080/app1; tomcat.domain.com:8080/app2 e assim por diante, mesmo para aplicativos jboss .. Com o proxy reverso, tenho essa saída: proxy.domain.com/app1 proxy.domain.com/app2 e assim por diante, portanto, não preciso especificar nem o número da porta nem o pertencente a um servidor especificado. Mas eu usaria subdomínios dessa maneira: app1.domain.com, app2.domain.com e assim por diante. Então, minha configuração do Nginx, a que funciona e usada apenas para o proxy reverso é que (vou relatar as linhas sobre o tomcat apenas, por simplicidade):

upstream tomcat_server {

    server tomcat.domain.com:8080;
}
server {
     listen 80;
     location /app1 {
                  proxy_pass http://tomcat_server;
                  proxy_set_header  X-Forwarded-Host $host;
                }
    }

Para configuração de subdomínio, modifiquei a parte sobre a definição do servidor assim:

server {
     listen 80;
     server_name app1.domain.com;
     location / {
                  proxy_pass http://tomcat_server/app1;
                  proxy_set_header  X-Forwarded-Host $host;
                }
    }

como sugerido em alguns fóruns, mas não funciona. Especifico que, no servidor que gerencia o DNS, app1.domain.com aponta para o servidor proxy.domain.com. Eu vi troncos, mas não havia nenhum. O que devo fazer?

Obrigado

Luciana

    
por Luciana D 21.07.2014 / 15:27

2 respostas

4

Você pode querer verificar sua configuração de DNS.

Eu também uso múltiplos subdomínios que eu crio rapidamente para vários aplicativos usando frameworks web como Python Django ou Ruby on Rails.

Um exemplo típico é em mydomain.com Eu posso querer ter myapp.mydomain.com em que myapp é uma estrutura servida em my_server_IP:some_port .

Para conseguir isso (muitos subdomínios em tempo real nas mesmas portas OR diferentes), deleguei a decisão do DNS ao servidor Web com um registro DNS Wildcard see Wikipedia . Como o nome sugere, esse registro produz um domínio a catch all que pode ser facilmente gerenciado a partir do servidor web com o uso de hosts virtuais - proxys de domínio, etc.

Um registro de curinga A na ferramenta de gerenciamento de DNS do GoDaddy tem esta aparência:

Host Points To TTL

* YOUR_SERVER_IP 1 Hour

E um arquivo de configuração do Nginx que passa todas as solicitações de app.mydomain.com para otherserver.com:9000/index.html

O resultado: você digita no navegador http://app.mydomain.com e o Nginx exibe o conteúdo de otherserver.com:9000/index.html , que pode ser outro servidor ou aplicativo, etc.

server {
    listen   80;

    server_name app.mydomain.com www.app.mydomain.com;

    access_log  /var/log/nginx/app_mydomain_com_access.log;
    error_log   /var/log/nginx/pp_mydomain_com_error.log;

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;

    location / {
        proxy_pass http://otherserver.com:9000/index.html;
    }

}
    
por Stef K 21.07.2014 / 16:11
3

DNS foram todos os direitos, eu estava fazendo algum teste no domínio local antes de colocá-los em produção .. Eu resolvi o problema mais fácil (eu não tenho index.html ou quaisquer outros arquivos, eu tenho apenas o nome da pasta). Finalmente, acho que isso seria útil para alguém, a configuração é:

upstream tomcat_server {
    server tomcat.domain.com:8080;
}
server {
    listen 80;
    server_name app1.domain.com;
    location / {
        proxy_pass http://tomcat_server/app1/;
        sub_filter /app1/  /;
    }
}

O "/" no final do proxy_pass é necessário ...

sub_filter é necessário para evitar que o resultado seja algo como

   app1.domain.com/app1

Isso é tudo .. Estou tentando melhorar essa configuração para o aplicativo trabalhando com o tomcat 6, pois o uso de subdomínios poderia gerar (como no meu caso) alguma doença nos aplicativos.

    
por Luciana D 22.07.2014 / 21:14