По какой-то причине мое приложение Node.js работает на 127.0.0.1:8081
требует /
.
Если я начну с этого, ОБЕ /
и /projectb
могут загрузить страницу.
server {
listen 80;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /projectb {
proxy_pass http://127.0.0.1:8081/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Когда я меняю его на это, /projectb
больше не может полностью загрузить страницу. Когда я смотрю на вкладку сети, некоторые (но не все) запросы не работают, например некоторые изображения, .js, некоторые неправильные конечные точки.
server {
listen 80;
location /somethingelse {
proxy_pass http://127.0.0.1:8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /projectb { # I'd expect this to still work.
proxy_pass http://127.0.0.1:8081/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Подводя итог, он работает, когда я напрямую попадаю в порт 123.456.78.910:8081
, и когда у меня есть ОБЕИ /
и /projectb
доверенное лицо http://127.0.0.1:8081/
, но не когда я прокси /projectb
сам по себе.
Почему это могло быть так?
Из документы nginx на proxy_pass
:
Если
proxy_pass
директива указывается с URI, затем, когда запрос передается на сервер, часть нормализованного URI запроса, соответствующая местоположению, заменяется URI, указанным в директиве:location /name/ { proxy_pass http://127.0.0.1/remote/; }
Если
proxy_pass
указывается без URI, URI запроса передается на сервер в той же форме, что и клиент, когда исходный запрос обрабатывается, или полный нормализованный URI запроса передается при обработке измененного URI:location /some/path/ { proxy_pass http://127.0.0.1; }
В ваших двух примерах последний предоставляет URI (завершение /
в URL-адресе), что приводит к нормализации URI, это приведет к разрыву относительных ссылок в файлах js / css. Удалить /
:
server {
listen 80;
location /somethingelse {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /projectb {
proxy_pass http://127.0.0.1:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}