Reverse Proxy abseits http/https (Subdomain -> Port XXX)

Krautmaster

Fleet Admiral
Registriert
Feb. 2007
Beiträge
24.313
Servus zusammen,

ich habe ne kleine Frage zu Reverse Proxy allgemein. Ich habe einen Reverse Proxy der meine Subdomains auf diverse Webserver VMs verteilt. 80 / 443.

Wie schaut es nun aus wenn ich zb einen Server habe der eine App auf drei Ports im Bereich 25556-25558 laufen habe?
Ich würde gern neue Instanzen derselben App als quasi Service ausprägen können, gleiche Ports, lediglich über die "Subdomain" unterschieden.

Kann ich im nginx Reverse Proxy dieses 1:1 Routing umsetzen, wenn ja wie? Also dass er subdomain1.domain.de:25556 an die entsprechende VM1 schiebt und subdomain2.domain.de:25556 an VM2.

Vielen Dank

Edit: Alternativ müsste ich halt immer 3-5 Ports für jede VM aufmachen und die Ports dann durchgehend hochzählen. Dann jeden Port an der Firewall zur jeweiligen VM routen. So ganz geil find ich das aber nicht.
 
Hallo,

ich kann Dir zwar die Frage mit nginx nicht beantworten, aber HAProxy kann das, soweit ich weiß. Vielleicht testest Du es einfach aus, die Config hierfür ist auch sehr einfach gestrickt.

Gruß
Rego
 
Für HTTP kannst du das doch ganz regulär machen. Für Nicht-HTTP-Traffic geht das nicht. DNS ist nichts anderes als eine Auflösung der IP und wenn du auf 1.2.3.4:25556 verbindest, gibts keinen Hostnamen (außer bei HTTP oder Protokollen, die es unterstützen).
 
Hi,

genau sowas hab ich mit Jupyterlab Containern am laufen. Von extern sind die Instanzen über verschiedene Subdomains alle auf Port 443 erreichbar (kann aber natürlich auch jeder andere sein), intern haben sie fortlaufende Portnummern.

Sollte ungefähr damit funktionieren:

Code:
# 1. Instanz
server {
       listen <port>;
       server_name sub1.deine.domain;

       location / {
               proxy_pass http://127.0.0.1:<port>;
               proxy_set_header Host $host;
               proxy_set_header X-Real-IP $remote_addr;
       }
}

# 2. Instanz
server {
       listen <port>;
       server_name sub2.deine.domain;

       location / {
               proxy_pass http://127.0.0.1:<höherer port>;
               proxy_set_header Host $host;
               proxy_set_header X-Real-IP $remote_addr;
       }
}
 
  • Gefällt mir
Reaktionen: Krautmaster
also ich mach das mit HAProxy

sub1.domain.tld:443 (also HTTPS) -> vm1:1928
sub2.domain.tld:443 (also HTTPS) -> vm2:1928
sub3.domain.tld:443 (also HTTPS) -> vm2:3938

usw usw

und ich bin mir sicher dass es auch mit Nginx und Apache2 geht =)
 
mit 443 und HTTPS2 mache ich das auf meinen Webservern für gängige Wordpress Instanzen ja schon. Was ich nicht genau sagen kann ist wie der Traffic dieser App auf den benötigten Ports aussieht. Es muss ja kein http / https sein wo man den header austauschen kann. Oder geht das bei jedem TCP / UDP traffic ??

Denke ich werde es einfach mal mit einem einfachen proxy pass / upstream versuchen. Wenns nicht geht dann muss ich mal die gegenprobe mit direktem Portmapping machen. Merci
 
Krautmaster schrieb:
Es muss ja kein http / https sein wo man den header austauschen kann. Oder geht das bei jedem TCP / UDP traffic ??
NGINX kann auch TCP und UDP (TCP and UDP Load Balancing) allerdings prinzipbedingt eben nicht anhand des Hostnamens wie du es willst. Das ist das, worauf @Yuuri hingewiesen hat.
 
  • Gefällt mir
Reaktionen: Krautmaster
vielen dank das hilft mir weiter. Dann werde ich vermutlich eher Ports unterscheiden müssen, sollte aber auch gehen.
 
Zurück
Oben