it-swarm.com.de

Reverse Proxy und Subdomains von Nginx

Ich habe ein Problem mit der Nginx-Konfiguration. Ich habe bereits nach einem Problem gesucht, aber die vorgeschlagenen Lösungen, die ich gesehen habe, haben bei mir nicht funktioniert.

Ich habe einige Apps auf einem Tomcat-Server und einige Apps auf einem JBoss-Server. Ich habe auf einem anderen Server Nginx als Reverse Proxy konfiguriert und es funktioniert einwandfrei. Was ich jetzt tun würde, ist, Zugriff auf die Apps auf Tomcat und JBoss unter Verwendung von Domain-Namen zu haben. Z.B. Ich habe Apps auf Tomcat unter folgender Adresse: Tomcat.domain.com:8080/app1; Tomcat.domain.com:8080/app2 und so weiter, auch für JBoss-Apps. Mit Reverse Proxy habe ich folgende Ausgabe: proxy.domain.com/app1 proxy.domain.com/app2 und so weiter, also nicht müssen weder die Portnummer noch die eines angegebenen Servers angeben. Aber ich würde Subdomains auf diese Weise verwenden: app1.domain.com, app2.domain.com und so weiter. Meine Konfiguration von Nginx, die funktioniert und nur für den Reverse-Proxy verwendet wird, ist folgende:

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

Für die Subdomain-Konfiguration habe ich den Teil über die Serverdefinition folgendermaßen geändert:

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

wie in einigen Foren vorgeschlagen, aber es funktioniert nicht. Ich gebe an, dass auf dem Server, der DNS verwaltet, app1.domain.com auf den Server proxy.domain.com verweist. Ich sah Protokolle, aber es gab keine. Was soll ich machen?

Vielen Dank

Luciana

5
Luciana D

Möglicherweise möchten Sie Ihr DNS-Setup überprüfen.

Ich verwende auch mehrere Subdomains, die ich im laufenden Betrieb mit Web-Frameworks wie PythonDjango oder Ruby on Rails für verschiedene Anwendungen erstelle.

Ein typisches Beispiel ist bei mydomain.com. Möglicherweise möchte ich myapp.mydomain.com haben, wobei myapp ein Framework ist, das bei my_server_IP:some_port bereitgestellt wird.

Um so etwas zu erreichen (viele Subdomains im laufenden Betrieb an denselben OR verschiedenen Ports) delegiere ich die Entscheidung vom DNS an den Webserver mit einem Wildcard-DNS-Eintrag siehe Wikipedia . Wie der Name schon sagt, erzeugt ein solcher Datensatz eine Catch - All - Domain , die mit Hilfe von virtuellen Hosts - Domain - Proxys usw. Einfach vom Webserver aus verwaltet werden kann .

Ein A Platzhalterdatensatz im DNS-Verwaltungstool von GoDaddy sieht folgendermaßen aus:

Host Points To TTL

* YOUR_SERVER_IP 1 Hour

Und eine Nginx-Konfigurationsdatei, die alle Anforderungen für app.mydomain.com an otherserver.com:9000/index.html weiterleitet.

Das Ergebnis: Sie geben den Browser http://app.mydomain.com ein und Nginx liefert den Inhalt von otherserver.com:9000/index.html, bei dem es sich um einen anderen Server oder eine andere Anwendung handeln kann

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

DNS waren alle Rechte, ich habe einige Tests in der lokalen Domäne durchgeführt, bevor ich sie in Betrieb genommen habe. Ich habe das Problem einfacher gelöst (ich habe keine index.html oder andere Dateien, ich habe nur den Ordnernamen). Ich denke das wäre für jemanden hilfreich, die Konfiguration ist:

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

Das "/" am Ende von proxy_pass ist erforderlich ...

sub_filter wird benötigt, um zu vermeiden, dass das Ergebnis ungefähr so ​​aussieht

   app1.domain.com/app1

Das ist alles. Ich versuche, diese Konfiguration für Apps zu verbessern, die mit Tomcat 6 arbeiten, da die Verwendung von Unterdomänen (wie in meinem Fall) zu Krankheiten in den Apps führen kann.

3
Luciana D