2015-07-03 3 views
0

У меня есть веб-сервер ngnix, работающий на порту 80. У меня есть Nodejs, работающий на 9000 портах. Мне нужно переписать запрос, поступающий с моего nginx на сервер приложений, который работает на порту 3000.Настройка правил перезаписи в nginx

Я попытался настроить с помощью следующих параметров, но он перенаправляется в браузер и не перенаправляет сервер приложений. Когда есть запрос для /hosts.json, его необходимо перенаправить на номер http://appserver.corp.cn.com:3000/hosts/hosts.json. Пожалуйста, дайте мне знать, где я ошибаюсь.

server { 
listen  80; 
server_name localhost; 
access_log /var/log/nginx/localhost.access.log; 
location/{ 
      rewrite ^/hosts.json http://appserver.corp.cn.com:3000/hosts.json permanent; 
      rewrite ^/hosts/bu.json http://appserver.corp.cn.com:3000/hosts/bu.json permanent; 
      proxy_pass http://localhost:9000; 
      proxy_http_version 1.1; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection 'upgrade'; 
      proxy_set_header Host $host; 
      proxy_cache_bypass $http_upgrade; 
    } 
} 

Мне нужно установить proxy_pass для ниже Шаблон URL

location ~ ^/hosts/bu/(.*)/app/(.*)$ { 
    proxy_pass http://appserver.cnma.com:3000/hosts/bu/$1/app/$2; 
} 
+0

Если вы не хотите редирект, то вы должны использовать 'proxy_pass' к соответствующему серверу –

+0

Как сделать это? Я имею в виду, что такое синтаксис для перенаправления на основе шаблона url? – zilcuanu

+0

Не могли бы вы быть более точными со словом «перенаправление»? «Переадресация» означает «сообщить браузеру, чтобы туда идти», в то время как вы действительно хотите туда отправиться (используя прокси-пароль nginx) и дать браузеру ответ. Это правильное описание вашей проблемы? –

ответ

2

Вы хотите прокси на разных серверах, основанных на URI. Существует естественный способ для этого, просто разные proxy_pass директивы в соответствующих location с:

server { 
    ... 

    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection 'upgrade'; 
    proxy_set_header Host $host; 
    proxy_cache_bypass $http_upgrade; 

    location/{ 
    proxy_pass http://localhost:9000; 
    } 

    location /hosts.json { 
    proxy_pass http://appserver.corp.cn.com:3000; 
    } 

    location /hosts/bu.json { 
    proxy_pass http://appserver.corp.cn.com:3000; 
    } 

    location /hosts/bu/ { 
    proxy_pass http://appserver.corp.cn.com:3000; 
    } 
} 
+0

Спасибо за ответ. Это то, что я искал. Однако у меня есть проблема при передаче параметров. Я обновил свой вопрос с помощью конкретного шаблона, который не работает для меня. Не могли бы вы сообщить мне, где я ошибаюсь. – zilcuanu

Смежные вопросы