Rest API auf bestehendem Webserver

Bennyaa

Lieutenant
Registriert
März 2007
Beiträge
828
Hallo, ich habe gestern einmal etwas mit express herum gespielt und einen kleinen webserver mit REST API gebaut.
jetzt habe ich allerdings üerb eine NAS schon einen funktionierenden Webserver, auf welchem meine Homepage läuft.
Kann man irgendwie die express requests nutzen, ohne, dass man dort mit .listen einen eigenen server am laufen hat?
Oder gibts nen anderen weg?
 
Wenn du mehrere HTTP-Server hast, dann brauchst du einen "Master", ein Reverse-Proxy, der je nach Domain/Pfad/wasauchimmer an den entsprechenden Server weiterleitet. Moderne Lösungen dafür wären Traefik und Caddy, gestandene Lösungen Apache und Nginx.
 
@GrumpyCat in wie fern hilft das dabei mehrere HTTP Server am laufen zu haben?
 
Vielleicht stellst Du Deine Frage nochmal genauer? Ich (und Bagbag anscheinend auch) hatte das so verstanden, dass Du schon irgendwo anders den Express-Krams laufen hast und auf dessen API von Deiner (auf dem NAS gehosteten) Homepage aus zugreifen willst.

Falls Express aber nur z.B. lokal auf Deinem Notebook lief oder so gibt's natürlich wenig zu wollen außer das irgendwo anders zu installieren, wo es auch dauerhaft läuft, im Zweifelsfall auf dem NAS.

Ah, und falls Dein Problem ist, Express auf dem NAS zu installieren, aber dort der HTTP(S)-Port schon belegt ist, ja, da musst Du dann auf dem NAS auf der entsprechenden Route einen Forward (Reverse Proxy) einrichten. Das läuft so in der Art "Alle Requests aus Verzeichnis /var/blabla beantworten, aber Requests auf /api/ bitte an (das Express unter) http://localhost:3000/ weiterleiten". Wie genau das konfiguriert wird, kann man aber mangels Angabe des NAS-Typs nicht so ohne weiteres sagen.
 
Ich habe es eher so verstanden, dass er auf dem NAS ein Webserver laufen hat und da jetzt zusätzlich seine API laufen lassen will. Also 2 mal Port 80 auf einem Gerät belegen.
 
Genau. Ich habe eine Webseite auf dem NAS am laufen.
Nun würde ich gerne eine API einbauen, um einfach bspw. Via „Domain/temp“ die Temperatur abfragen zu können.
 
Wenn da doch eh schon ein Webserver läuft, braucht er ja keinen dedizierten reverse proxy, sondern kann einfach via location und mod_proxy (apachw) bzw. proxy_pass (nginx) routen. Der webserver bleibt auf 80/443 und der express (oder whatever) lauscht dann auf 3000 (oder irgendwas anderes >1024)
 
foo_1337 schrieb:
Wenn da doch eh schon ein Webserver läuft, braucht er ja keinen dedizierten reverse proxy, sondern kann einfach via location und mod_proxy (apachw) bzw. proxy_pass (nginx) routen. Der webserver bleibt auf 80/443 und der express (oder whatever) lauscht dann auf 3000 (oder irgendwas anderes >1024)
Aber dann kann ich ni ja über die Domain direkt drauf, sondern müsste doch nen 2. Webserver laufen lassen, der nur die Rest api macht?
 
Bennyaa schrieb:
Aber dann kann ich ni ja über die Domain direkt drauf, sondern müsste doch nen 2. Webserver laufen lassen, der nur die Rest api macht?
Du schreibst ja oben, dass es eine express app ist. Die bringt doch sowieso ihren eigenen Webserver mit, sprich er läuft sowieso. Und wieso solltest du da nicht über die Domain drauf kommen? Die Idee ist, dass du die express app von extern nicht via Port 3000 ansprichst, sondern der Pfad dahin via Proxy pass "gerouted" wird, sprich: example.org/foo -> localhost:3000. Was ist denn dein primärer Webserver, den du nutzt?
 
Es ist eine Synology, auf der Apache läuft.
Ich würde gerne jetzt ne Rest api dazu bauen. Das ist der Stand.
Ich hatte nur geschrieben, dass ich mit Express gestern mal im vs Code probiert habe.
 
Müsste ich mal in der synology schauen.
Der läuft ja da drauf und meine App aus diversen Gründen wo anders
 
Bennyaa schrieb:
Müsste ich mal in der synology schauen.
Der läuft ja da drauf und meine App aus diversen Gründen wo anders
Das wäre auch kein Problem:

<Location /api>
ProxyPass http://x.x.x.x:3000
ProxyPassReverse http://x.x.x.x:3000
</Location>

Wenn "wo anders" aber irgendwo im Internet bedeutet, dann würde ich das so nicht machen, da die Verbindung zwischen Apache und der API unverschlüsselt ist
 
Unbekannten Begriff nehmen und in Suchfeld einer dieser Suchmaschinen eingeben:
duckduckgo.com
google.com
bing.com
 
Zurück
Oben