Как Вы получаете несколько портов, работающих с nginx proxy_pass и Node Express?

У меня есть несколько экземпляров узла, выполняющих каждого на различном порте. (8000, 8001, и т.д.), У меня также есть nginx, работающий на порте 80. То, что я пытаюсь сделать, позволяют пользователю вводить мой сайт через единственное доменное имя, и затем через различные URL смочь получить доступ к другому серверу узла.

В настоящее время все работает после

http://example.com:8000/index.html (This is one node server running a site)
http://example.com:8001/index.hmtl (this is another node server running a different site)

То, что я хочу смочь сделать, позволяют пользователю вводить в пути URL и автоматический прямой их на корректный сайт без них имеющий необходимость указать порт. Так, например:

http://example.com/site1/inedx.html (This is one node server running a site at port 8000)
http://example.com/site2/index.html (this is another node server running a different site at port 8001)

Я пытался достигнуть этого с nginx proxy_pass правила, но испытываю затруднения, заставляя это работать. По существу nginx перенаправляет к корректному специальному серверу, но затем вся моя маршрутизация в специальных повреждениях приложения, потому что это испытывает недостаток в порте.

Таким образом, когда я перехожу к http://example.com/site1/index.html, это берет меня на http://example.com/index.html. Любая справка значительно ценилась бы. Я вставил соответствующие части nginx.conf и и маршрут экспресса в качестве примера ниже.

nginx.conf

server {
            listen 80;
            server_name 11.11.11.111;
            root /home/ubuntu;

            location /site1/ {
                    proxy_pass http://11.11.11.111:8000/;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header Host $proxy_host;
                    proxy_set_header X-NginX-Proxy true;
                    proxy_pass http://11.11.11.111:8000/;
                    proxy_redirect http://11.11.11.111/* http://11.11.11.111:8000/*;
            }
            location /site2/ {
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header Host $proxy_host;
                    proxy_set_header X-NginX-Proxy true;
                    proxy_pass http://11.11.11.111:8001/;
                    proxy_redirect http://11.11.11.111/* http://11.11.11.111:8001/*;
            }
}

app.js

app.get('/', function(req, res){
    res.redirect('/index.html');
});
0
задан 13 October 2014 в 21:36
1 ответ

Когда вы настраиваете проксирование через nginx для site / и site2 / , nginx прозрачно удаляет путь, если вы явно не указали его в proxy_pass .

Например:

location /site1/ {
    proxy_pass http://11.11.11.11:8000;
}

Когда вы обращаетесь к example.com/site1 , nginx захватит этот запрос из-за блока местоположения, указанного выше, и передаст его в express. Express увидит запрос как / . / site1 удален.

Поэтому, если вы хотите сохранить / site1 , либо:

  • Укажите это в своей конфигурации, что «относительный путь» будет / site1 и добавьте его в свой код.
  • Или измените nginx на proxy_pass http://11.11.11.11:8000/site1[125 provided
1
ответ дан 4 December 2019 в 17:09

Теги

Похожие вопросы