web-dev-qa-db-fra.com

Proxy inverse et sous-domaines Nginx

J'ai un problème avec la configuration de Nginx. J'ai déjà cherché un problème, mais les solutions proposées que j'ai vues ne fonctionnaient pas pour moi.

J'ai des applications sur un serveur Tomcat et des applications sur un serveur JBoss. J'ai configuré sur un autre serveur Nginx en tant que proxy inverse et cela fonctionne correctement. Maintenant, je voudrais avoir accès aux applications sur Tomcat et jboss en utilisant des noms de domaine. Par exemple. J'ai des applications sur Tomcat à cette adresse: Tomcat.domain.com:8080/app1; Tomcat.domain.com:8080/app2 et ainsi de suite, même pour les applications jboss .. Avec le proxy inverse, j'ai cette sortie: proxy.domain.com/app1 proxy.domain.com/app2, etc., de sorte que je ne ne devez spécifier ni le numéro de port ni l'appartenance à un serveur spécifié. Mais j'utiliserais les sous-domaines de cette manière: app1.domain.com, app2.domain.com, etc. Ainsi, ma configuration de Nginx, celle qui fonctionne et qui est utilisée uniquement pour le proxy inverse, est la suivante (je signalerai les lignes relatives à Tomcat uniquement, pour des raisons de simplicité):

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

Pour la configuration de sous-domaine, j'ai modifié la partie concernant la définition du serveur comme suit:

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

comme suggéré dans certains forums, mais cela ne fonctionne pas. Je précise que, sur le serveur qui gère DNS app1.domain.com, pointe vers le serveur proxy.domain.com. J'ai vu des bûches, mais il n'y en avait pas. Que devrais-je faire?

Merci

Luciana

5
Luciana D

Vous voudrez peut-être vérifier votre configuration DNS.

J'utilise également plusieurs sous-domaines que je crée à la volée pour diverses applications à l'aide de cadres Web tels que Python Django ou Ruby sur Rails.

Un exemple typique est à mydomain.com Il se peut que je veuille avoir myapp.mydomain.com où myapp est un cadre servi à my_server_IP:some_port.

Afin de réaliser cela (plusieurs ports à la volée sur le même OR différents ports), je délègue la décision du DNS au serveur Web à l'aide d'un enregistrement DNS Wildcard voir Wikipedia . Comme son nom l'indique, cet enregistrement produit un domaine interceptable qui peut être facilement géré à partir du serveur Web à l'aide d'hôtes virtuels - proxy de domaine, etc. .

Un enregistrement générique A dans l'outil de gestion DNS de GoDaddy ressemble à ceci:

Host Points To TTL

* YOUR_SERVER_IP 1 Hour

Et un fichier de configuration Nginx qui transmet toutes les demandes de app.mydomain.com à otherserver.com:9000/index.html

Le résultat: vous tapez dans le navigateur http://app.mydomain.com et Nginx sert le contenu de otherserver.com:9000/index.html qui peut être un autre serveur ou une autre application, 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;
    }

}
5
Stef K

Les DNS étaient tous des droits, je faisais quelques essais dans le domaine local avant de les mettre en production. J'ai résolu le problème plus facilement (je n'ai ni index.html ni aucun autre fichier, je n'ai qu'un nom de dossier) .. Enfin, Je pense que cela serait utile pour quelqu'un, la configuration est la suivante:

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

Le "/" à la fin de proxy_pass est nécessaire ...

sub_filter est nécessaire pour éviter que le résultat ne soit comme

   app1.domain.com/app1

C'est tout. J'essaie d'améliorer cette configuration pour les applications qui fonctionnent avec Tomcat 6, car l'utilisation de sous-domaines pourrait générer (comme dans mon cas) une maladie dans les applications.

3
Luciana D