У меня есть несколько экземпляров узла, выполняющих каждого на различном порте. (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');
});
Когда вы настраиваете проксирование через 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
и добавьте его в свой код. proxy_pass http://11.11.11.11:8000/site1[125 provided