2017-05-21 3 views
1

Ich habe immer Probleme mit Nginx-Konfigurationen. Mein SPA befindet sich unter/mnt/q/app (Pushstatus ist aktiviert) und das Frontend-Root befindet sich unter client/public. Alles sollte auf index.html gemappt werden, wo die App die Route aufnimmt und entscheidet, was zu tun ist.Nginx Config mit Spa und Unterverzeichnis root

Der vollständige Pfad zum Index ist /mnt/q/app/client/public/index.html.

Ich glaube, ich hatte jetzt keine Optionen mehr. Egal was ich tue, ich bekomme nur einen 404 von nginx zurück, ich denke die Konfiguration ist einfach genug und hat keine Ahnung was los ist.

server { 
    listen 80; 
    server_name app.dev; 

    root /mnt/q/app; 

    location/{ 
     root /client/public; 
     try_files $uri @rewrites =404; 
    } 

    location @rewrites { 
     rewrite ^(.+)$ /index.html last; 
    } 
} 

Jede Hilfe wird geschätzt.

Antwort

2

Wenn nginx das Dateisystem vom Stamm aus betrachtet, sollte root auf /mnt/q/app/client/public und nicht auf einen der beiden von Ihnen verwendeten Werte festgelegt werden. Das letzte Element der Anweisung try_files kann eine Standardaktion (z. B. /index.html), ein benannter Speicherort oder ein Antwortcode sein. Sie haben einen benannten Ort im vorletzten Element - der ignoriert wird.

Ihr benannter Standort sollte funktionieren, ist aber unnötig, da try_files in der Lage ist, es einfacher zu implementieren. Siehe this document für mehr.

Zum Beispiel:

root /mnt/q/app; 

location/{ 
    root /mnt/q/app/client/public; 
    try_files $uri $uri/ /index.html; 
} 

location /api { 
} 

location /auth { 
} 

Das $uri/ Element wird einen nachlauf / auf Verzeichnisse hinzufügen, so dass die index Richtlinie arbeiten kann - Sie müssen es nicht hinzufügen, wenn Sie es nicht brauchen.

+0

Vielen Dank für die Antwort. Ich möchte jedoch in Zukunft mehrere Standorte hinzufügen. Zum Beispiel werde ich API- und Auth-Komponenten hinzufügen, die ich unter/api und/auth haben möchte, während der Pfad unter/mnt/q/app/api/und/mnt/q/app/auth sein sollte beziehungsweise. Ich bin mir nicht sicher, ob ich das mit diesem Ansatz tun kann. Ich habe dieses Gist als "Vorlage" verwendet: https://gist.github.com/aotimme/5006831 – marekpw

+0

Der lokale Pfad wird gebildet, indem der 'root'-Wert mit dem URI verkettet wird, also die'/api' und '/ auth 'Blöcke würden den gleichen Wert für' root' verwenden (was vom äußeren Block übernommen werden kann). Ich nehme an, dass '/ index.html' die URI für die in Ihrer Frage erwähnte Datei ist, die für 'root' einen anderen Wert benötigt. Siehe Aktualisierungen. –

+0

Danke, es hat mein Problem gelöst. – marekpw

Verwandte Themen