2016-10-11 3 views
1

Je suis en cours d'exécution d'une application Koa sur le port 5000, et je voudrais Ngnix de servir l'application dans un sous-répertoire - par exemple: http://example.com/myNodeAppNoeud JS - Nginx - proxy_pass à un sous-répertoire - Koa

Voici ce que Je suis actuellement en ai /etc/nginx/sites-enabled/default

 location ^~ /myNodeApp/ { 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header Host $http_host; 
      proxy_set_header X-NginX-Proxy true; 
      proxy_pass http://localhost:5000/; 
     } 

Ce genre de travaux ... en dehors du fait que toute redirection par exemple this.redirect('/') dans mon application Koa va à la racine web nginx /

En outre, il ne rend rien du répertoire public de mes applications Koa, par exemple. feuilles de style, javascript et images.

Qu'est-ce que je fais mal? Merci.

+0

Pourquoi utilisez-vous match regexp de l'emplacement? Passer à la chaîne de caractères simple 'location/myNodeApp/{' –

+0

Merci @Terra. J'ai lu une question similaire SO où ils l'ont fait et j'ai pensé que je l'essayerais aussi. Passer à 'location/myNodeApp/{...}' (sans l'expression régulière comme vous l'avez suggéré) donne le même résultat. – doublesidedstickytape

+0

Pouvez-vous vérifier et afficher l'en-tête 'Location' complet? Avec partie de domaine.Parce que la réécriture d'en-tête 'Location' ne fonctionne que si votre application de noeud redirige vers http: // localhost: 5000 /. Mais si l'application de noeud redirige vers http: // localhost/- réécriture personnalisée requise. Donc, besoin de savoir comment ressemble l'entête de localisation. –

Répondre

2

J'ai récemment rencontré le même problème et voici ce que j'ai fait pour le réparer.

Dans serveur Config:

je devais ajouter

rewrite ^/myNodeApp/(.*)$ /$1 break; 

la configuration Nginx, dans le

location /myNodeApp/ {...} 
bloc

, sous ce que vous avez déjà dans votre exemple.

En côté client:

I ajouté

<base href='/myNodeApp/'> 

à la tête < > de mes fichiers html (ou fichier de mise en page de carlin dans mon cas). Cela préfixe tous les liens avec votre sous-répertoire.

Notez que vous devrez supprimer les éventuels «leading» de vos liens existants. Par exemple,

<link rel="stylesheet" href="layout.css"> 

au lieu de

<link rel="stylesheet" href="/layout.css"> 

Que l'on m'a pris pendant un certain temps.

Bonus:

Si vous utilisez Socket.IO, comme je suis, vous aurez besoin de faire quelques changements plus pour arrêter quelques erreurs qui apparaissent dans votre console. Vous devez lui passer une option de chemin et spécifier votre sous-répertoire.

Dans vos fichiers html

var socket = io.connect("/", {path: "/myNodeApp/socket.io"}) 
+0

Parfait! Merci - c'était exactement ce que je cherchais. +1 – doublesidedstickytape