2016-02-26 3 views
0

Je souhaite que plusieurs sites soient référencés par Nginx. soit en utilisant site1.someIp, site2.someIp ou par someIp/site1, someIp/site2nginx transférer mais modifier le contexte d'emplacement

Lorsque je tente d'y parvenir en utilisant les paramètres suivants:

server{ 
     listen 80; 
     listen [::]:80; 

     location /first { 
       proxy_pass http://localThing:somePort; 
     } 

     location /second { 
       proxy_pass localThing2; 
     } 
} 

Il en résulte un transfert /first-http://localThing:somePort/first mais en fait, je veux seulement de transmettre à http://localThing:somePort

Actuellement, j'utilise plusieurs serveurs d'écoute sur différents ports, par exemple someIp:1111, someIP:2222 mais ce n'est pas une bonne solution.

  • Je veux soit en quelque sorte pas transmettre l'emplacement adapté
  • ou utilisez mysite.someIp: somePort (mais ne sont pas sûr de savoir comment atteindre cet objectif)

La réponse aimablement fournie par @jdewald est un bon début car le HTML est transmis mais PAS le CSS.

Jusqu'à présent, je remarqué qu'il peut être simplifié pour

location /first { 
    proxy_pass http://someip:somePort/; 
} 

où le dernier / ajoutant après somePort/ est important, mais les résultats dans le même problème que le CSS est injoignable. Le CSS semble être inaccessible car l'application (http://concourse.ci/) le sert à localIp:somePort/public. Ce n'est pas un problème si l'emplacement est défini sur / mais comme je veux proxy plusieurs services d'une manière agréable en utilisant l'une des deux méthodes décrites ci-dessus et non le mappage à / en utilisant différents ports.

+0

Belle prise sur la version simplifiée, j'avais oublié et oublié que nginx ne ferait que remplacer l'emplacement correspondant. Le CSS est-il conceptuellement sous /(first|second|...)/public/blah.css (et dans l'application sous /public/blah.css) ou first.mysite.com/public/blah.css? Voulez-vous supprimer la partie "/ public" ou voulez-vous la joindre à partir de là? Quelle URL est le HTML servant pour le CSS? –

+0

Le CSS est servi par exemple de http: // myServer: 5555/public/main.css? Id = fef6507a177742529af48a161e08a9a4 Autant que je comprends la chose que le CSS est servi du service local de/public et je veux le servir de 'myNginx/service /' ou 'service.myNginx' je veux juste tout le matériel livré, je veux juste que le service fonctionne. –

+0

Donc le HTML et CSS viennent de différents endroits? Il n'y a vraiment aucune raison que vous ne puissiez pas simplement configurer un bloc d'emplacement comme/service/{qui passe à/public /. Je peux éditer la réponse, mais c'est essentiellement ce que vous avez déjà, juste pour chaque bloc d'emplacement –

Répondre

1

Vous pouvez simplement réécrire l'URI:

location /first { 
    rewrite ^/first(.*)$ $1 break; 
    proxy_pass http://someip:somePort; 
} 

Sinon, vous pouvez avoir le bloc/d'abord être une expression régulière et proxy_pass à 1 $ (en utilisant la même regex), par exemple:

location ~ ^/first(.*) { 
    proxy_pass http://someip:somePort$1; 
} 
+0

je vous remercie ce résultat en HTML se charge mais css pas http: //myIP/public/main.css? Id = fef6507a177742529af48a161e08a9a4 et étrangement ce ** public est inséré ** –

+0

Je ne suis pas sûr de ce que vous voulez dire @geoHeil? Est-ce que/public est l'un de vos blocs? –

+0

Non Je filtre pour/d'abord mais bizarrement seul le HTML est chargé. L'URL est l'URL de certains CSS. J'ai remarqué que le/public/a été ajouté. Mais je ne sais pas pourquoi. –