2016-11-18 1 views
1

Ich habe einen nginx Reverse-Proxy einrichten wesentlichen this unten wiedergegeben aufgebauter zum Knoten:Schwierigkeiten, eine Datei von node.js bekommen nginx mit Reverse-Proxy-

upstream nodejs { 
    server localhost:3000; 
} 

server { 
    listen 8080; 
    server_name localhost; 
    root ~/workspace/test/app; 

    location/{ 
     try_files $uri $uri/ @nodejs; 
    } 

    location @nodejs { 
     proxy_redirect off; 
     proxy_http_version 1.1; 
     proxy_pass http://nodejs; 
     proxy_set_header Host $host ; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 

Nun sind alle reisen meine Anfragen AJAX POST einfach gut zu der Knoten mit dieser Einstellung, aber ich bin für Dateien danach abfragen, die ich nicht finden kann, wenn ich eine clientside AJAX GET-Anfrage an den Node-Server (über diesen Nginx-Proxy).

Zum Beispiel für ein clientseitige JavaScript-Anfrage wie .get('Users/myfile.txt') der Browser für die Datei auf localhost:8080 aussehen, aber es wird nicht gefunden, weil es tatsächlich zu localhost:3000

http://localhost:8080/Users/myfile.txt // what the browser searches for 
http://localhost:3000/Users/myfile.txt // where the file really is 

geschrieben Wie richte ich den Proxy zu dieser Datei navigieren?

+0

Es sieht so aus, als ob Node.js es auf 8080 routet. Können Sie die entsprechende Konfiguration anzeigen? –

+0

Ich benutze Knoten und Express. Die einzige Konfigurationsdatei, die ich mir vorstellen kann, ist für nginx, die ich gepostet habe. Ein Szenario ist, dass ich 'app.post ('/ data')' habe, um die Daten im Knoten-Server-Code, aber nicht 'app.get() 'zu behandeln. Die Datei wird stattdessen von einer separaten Engine geschrieben. Muss ich 'app.get()' im Knoten explizit einrichten, damit der Proxy erkannt wird? Oder ist der Schuldige in nginx.conf? – o1sound

+1

Sorry, ich habe falsch gelesen. Es ist Routing zu 8080, weil das Ihre NGINX-Konfiguration zuhört. In jedem Fall wird NGINX dies an Port 3000 weitergeben, wenn es bei der 'try_files' Direktive fehlschlägt, also sollte es die Datei trotzdem finden. Erhalten Sie 404 in den Protokolldateien? –

Antwort

1

Okay, ich habe es funktioniert. Die Einrichtung in der nginx.conf Datei, die oben gepostet wurde, ist in Ordnung. Dieses Problem war niemals ein Nginx-Problem. Das Problem war in meiner index.js Datei auf dem Node-Server.

Als ich nginx hat alle statischen Dateien zu dienen, bemerkte ich aus der folgenden Zeile von index.js

app.use(express.static('Users')); // please don't comment this out thank you 

Ich brauchte eine Weile, um mich dazu zu beheben zurück, als ich ziemlich eingewickelt wurde bis im Verständnis von Nginx. Mein damaliges Denken war, dass, wenn nginx statische Dateien bereitstellt, warum brauche ich Express, um ihnen zu dienen? Ohne diese Zeile wird Express jedoch offensichtlich keine Dateien bedienen.

Jetzt mit Express liefern statische Dateien ordnungsgemäß, Nginx behandelt alle statischen Dateien von der Web App und Knoten behandelt alle Dateien aus dem Backend und alles ist gut.

Dank Keenan Lawrence für die Anleitung und AR7 für die Konfig!

Verwandte Themen