2017-06-14 3 views
1

Mein Plan

In meiner app, möchte ich das Backend vom Frontend trennen. Ich habe mehrere statische Seiten mit vue.js Zugriff auf eine API von einem Express-Server zur Verfügung gestellt. Alle statischen Dateien sollten von nginx geliefert werden.
So jetzt meine nginx-Konfigurationsdatei sieht wie folgt aus:Statische Websites mit nginx und Express.js - Authentification

http { 
    ... 
    upstream backend { 
    server localhost:3000; 
    keepalive 64; 
    } 
    ... 
    server { 
    ... 
    location /api { 
     ... 
     proxy_pass http://backend; 
    } 
    } 
} 

Also alles Anfrage /api3000 per Express läuft im Hafen abgewickelt werden. Benutzer können sich über das Frontend anmelden, das auf die Backend-API zugreift.

Nun zum Problem:

Ich habe einige Websites (zB /dash), die auch statisch sind, sondern nur für Benutzer zugänglich sein, die authentifiziert werden und mit einem bestimmten Benutzer (Authentifizierung per Express-Sitzung behandelt wird) Rolle (zB editor).
Ein Benutzer, der kein editor ist, sollte einen error 403 erhalten, wenn er auf /dash zugreift, während für die anderen /dash von nginx bedient werden soll.

Ich hoffe, ich war klar genug, es ist nicht einfach, mein Problem richtig auszudrücken. Ich schätze jede Hilfe und jeden Rat, vielleicht ist meine Herangehensweise keine gute Idee oder eine schlechte Praxis.

bearbeiten

Lösung kann in den Kommentaren der richtigen Antwort zu finden.

Antwort

1

Zunächst sollte die Autorisierung für einige statische Dateien im Backend-Server und nicht in nginx behandelt werden. Nginx ist nur ein Proxy und kein Handler für die Autorisierung. Vielleicht check out passport, wenn Sie Express verwenden.

Zweitens, ich denke, Sie haben eine falsche Vorstellung von statischen Dateien. Ein Tipp wäre, sie zu kompilieren, um sie kleiner zu machen (siehe http://nginx.org/en/docs/http/ngx_http_gzip_module.html). Aber so weit wird nginx mit Ihren statischen Dateien umgehen.

+0

Danke für die Antwort. Ich habe bereits eine Authentifizierung implementiert und es wird per Express abgewickelt, ich habe einen Pass benutzt. Nginx sollte nicht rendern, sondern nur die Dateien bereitstellen. Die Dateien greifen dann mit ajax auf die API zu. Ich wollte Nginx verwenden, um die Dateien zu liefern, da es schneller sein soll. Aber ich möchte immer noch den Zugriff auf bestimmte Websites beschränken, für die ich mit einer Middleware überprüfen müsste, ob der Benutzer erlaubt ist. Für jede andere Seite ist jeder erlaubt, also benutze nur nginx für diese. Sorry für die Verwirrung ... –

+1

Ich glaube, Sie sollten Nginx für Ihre gesamte Website in dieser Angelegenheit verwenden. Die Autorisierungs-Middleware sollte sicherstellen, dass die richtigen statischen Dateien gerendert und dem Benutzer bereitgestellt werden. Nginx ist nur eine Spiegelung Ihres Servers und nicht der tatsächliche Server. – Jesper

+0

Ok, also übergeben Sie einfach den Proxy zum Ausdrücken? –