2015-10-20 5 views
12

У меня есть несколько приложений ASP.NET, работающих на одном сервере IIS с разными портами для каждого приложения.Использование nginx в качестве обратного прокси-сервера для сервера IIS

Я установил Nginx на том же сервере, так что мои клиенты могут получить доступ все мои приложения только через порт 80.

Nginx работает все права на порт 80. Мои отдельные приложения ASP.NET также и работает ,

Я сделал эти изменения в файле 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; 
    } 

Затем я перезапущены Nginx и набран URL http://127.0.0.1/students/ в моем браузере. Nginx подал 404 страницы.

Я не внес никаких изменений в файл conf.

Что я делаю неправильно?

+0

Эта конфигурация выглядит совершенно правильно; у меня очень похожая конфигурация в моей работе, используя proxy_pass внутри блока местоположения без части URI для передачи запросов на разные серверы с URI без изменений. Можете ли вы проверить, входит ли Nginx в блок местоположения? – ThrawnCA

ответ

-2

Попробуйте использовать эту директиву

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

и тот же блок для 2-го

+0

Nginx дает мне ошибку ... наверх не допускается здесь – Shuaib

+0

Пожалуйста, добавьте некоторое объяснение в свой ответ! –

11

Я считаю, что проблема у вас возникли связано с началом URL пути. Возвращает ли URL http://120.0.0.1:84/students/ страницу или 404? Если вы ожидаете перейти на http://127.0.0.1:80/students/ и увидите страницу в http://127.0.0.1/, вы обнаружите, что nginx не преобразует путь для вас с этой конфигурацией. Скорее, он ищет точно такой же путь на прокси-сервере.

Вы должны поместить / на конец URL в 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/; 
} 

Это тонкое, но важное Гоча в Nginx конфиги! Если вы не включили обратную косую черту, http://127.0.0.1:84 будет рассматриваться как местоположение сервера. Если у вас есть обратная косая черта, это будет рассматриваться как URL-адрес, и он заменит все в прокси-URL до части «location».

+0

Если я просматриваю http://127.0.0.1:84/students, я получу свою страницу, потому что IIS прослушивает 84. Я хочу, чтобы, если я просматриваю http://127.0.0.1/students, тогда nginx должен переписать url to http://127.0.0.1:84. Возможно ли это в nginx? – Shuaib

+0

@Shuaib Я считаю, что это именно то, что происходит с конфигурацией выше. – jwg

+0

Я все еще получаю 404 страницу, обслуживаемую nginx. – Shuaib

0

Если вы хотите преобразовать IIS 127.0.0.1:84/students в nginx 127.0.0.1/students. попробуйте ниже кода ..

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; 
} 
Смежные вопросы