2015-10-20 10 views
12

Ho più applicazioni ASP.NET in esecuzione su un singolo server IIS con porte diverse per ogni applicazione.Utilizzo di nginx come proxy inverso per il server IIS

Ho installato nginx sullo stesso server, in modo che i miei clienti possono accedere a tutte le mie applicazioni solo tramite la porta 80.

Nginx è in esecuzione bene sulla porta 80. Le mie singole applicazioni ASP.NET sono anche installato e funzionante .

ho fatto queste modifiche nel file di configurazione di nginx

location /students/ { 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $remote_addr; 
     proxy_set_header Host $host; 
     proxy_pass http://127.0.0.1:84; 
    } 
    location /registration/ { 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $remote_addr; 
     proxy_set_header Host $host; 
     proxy_pass http://127.0.0.1:82; 
    } 

Poi ho riavviato nginx e digitato l'URL http://127.0.0.1/students/ nel mio browser. Nginx ha servito una pagina 404.

Non ho apportato altre modifiche al file conf.

Cosa sto facendo male?

+0

Quella configurazione sembra perfettamente corretta; abbiamo una configurazione molto simile al mio lavoro, usando proxy_pass, all'interno di un blocco di posizione, senza una porzione URI, per passare le richieste a diversi server con URI invariato. Sei in grado di verificare se Nginx sta inserendo il blocco di posizione? – ThrawnCA

risposta

-2

tenta di utilizzare questa direttiva

upstream http://localhost { 
    server 127.0.0.1:84; 
} 

e lo stesso blocco per il 2 °

+0

Nginx mi dà l'errore ... a monte non è permesso qui – Shuaib

+0

Per favore aggiungi qualche spiegazione alla tua risposta! –

11

Credo che il problema che si è legato al punto di partenza del percorso URL. L'URL http://120.0.0.1:84/students/ restituisce la pagina o un 404? Se ti aspetti di andare a http://127.0.0.1:80/students/ e vedere la pagina http://127.0.0.1/, troverai che nginx non trasforma il percorso per te con questa configurazione. Piuttosto, cerca esattamente lo stesso percorso sul server proxy.

Hai bisogno di mettere il / sulla fine dell'URL nella direttiva proxy_pass:

location /students/ { 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $remote_addr; 
    proxy_set_header Host $host; 
    proxy_pass http://127.0.0.1:84/; 
} 

Questa è una Gotcha sottile ma importante in configurazioni nginx! Se non si include la barra rovesciata, http://127.0.0.1:84 verrà considerata come posizione del server. Se si dispone della barra rovesciata, verrà considerata come un URL e sostituirà tutto nell'URL del proxy fino alla parte "posizione".

+0

Se sfoglio http://127.0.0.1:84/students otterrò la mia pagina, perché IIS è in ascolto su 84. Quello che voglio è che se sfoglio http://127.0.0/students allora nginx dovrebbe riscrivere il url a http://127.0.0.1:84. È possibile in nginx? – Shuaib

+0

@Shuaib Credo che questo sia esattamente ciò che accade con la configurazione sopra. – jwg

+0

Ricevo ancora una pagina 404 servita da nginx. – Shuaib

0

Se si desidera trasformare IIS 127.0.0.1:84/students in nginx 127.0.0.1/students. prova sotto codice ..

location /students { 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $remote_addr; 
    proxy_set_header Host $host; 
    proxy_pass http://127.0.0.1:84/students; 
} 
location /registration { 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $remote_addr; 
    proxy_set_header Host $host; 
    proxy_pass http://127.0.0.1:82/registration; 
}