2015-10-20 19 views
12

Mam wiele aplikacji ASP.NET działających na pojedynczym serwerze IIS z różnymi portami dla każdej aplikacji.Używanie nginx jako odwrotnego proxy do serwera IIS

Mam zainstalowany nginx na tym samym serwerze, tak, że moi klienci mogą uzyskać dostęp do wszystkich swoich aplikacji tylko za pomocą portu 80.

Nginx działa wszystko w porządku na porcie 80. Moi poszczególne aplikacje ASP.NET są również w górę i bieganie .

Zrobiłem te zmiany w nginx conf

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; 
    } 

Potem ponownym uruchamianiu nginx i wpisany url http://127.0.0.1/students/ w przeglądarce. Nginx wyświetlił stronę 404.

Nie wprowadziłem żadnych innych zmian do pliku conf.

Co robię źle?

+0

Ta konfiguracja wygląda doskonale; mamy bardzo podobną konfigurację w mojej pracy, używając proxy_pass, wewnątrz bloku lokalizacji, bez części URI, aby przekazywać żądania do różnych serwerów z niezmienionym URI. Czy jesteś w stanie sprawdzić, czy Nginx wchodzi do bloku lokalizacji? – ThrawnCA

Odpowiedz

-2

Spróbuj skorzystać z tej dyrektywy

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

i ten sam blok na 2nd

+0

Nginx podaje mi błąd ... Upstream nie jest tutaj dozwolony – Shuaib

+0

Proszę dodać wyjaśnienie do swojej odpowiedzi! –

11

wierzę, że problem masz jest związane z początku ścieżki URL. Czy adres URL http://120.0.0.1:84/students/ zwraca stronę lub 404? Jeśli spodziewasz się przejść do strony http://127.0.0.1:80/students/ i zobaczyć stronę pod adresem http://127.0.0.1/, przekonasz się, że nginx nie przekształca ścieżki w tej konfiguracji. Raczej szuka dokładnie tej samej ścieżki na serwerze proxy.

Trzeba umieścić / na końcu adresu URL w dyrektywie 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/; 
} 

To jest subtelna, ale istotna haczyka w configs nginx! Jeśli nie uwzględnisz odwrotnego ukośnika, http://127.0.0.1:84 będzie traktowany jako lokalizacja serwera. Jeśli masz odwrotny ukośnik, będzie on traktowany jako adres URL i zastąpi wszystko w adresie URL serwera proxy aż do części "lokalizacja".

+0

Jeśli przeglądam http://127.0.0.1:84/students, otrzymam moją stronę, ponieważ IIS nasłuchuje na 84. Chcę, żeby przeglądając http://127.0.0.1/students, Nginx powinien przepisać adres URL do http://127.0.0.1:84. Czy to możliwe w Nginx? – Shuaib

+0

@Shuaib Wierzę, że to jest dokładnie to, co dzieje się z powyższą konfiguracją. – jwg

+0

Nadal dostaję stronę 404 obsługiwaną przez nginx. – Shuaib

0

Jeśli chcesz przekształcić IIS 127.0.0.1:84/students na nginx 127.0.0.1/students. spróbuj poniżej kodu.

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; 
}