Я пытаюсь настроить новый узел вместе с моим предыдущим приложением PHP.
www.xyz.com
. Обслуживается с помощью nginx.Я хочу разместить приложение NodeJs на сервере по ссылке www.xyz.com/nodeApp
Мой подход заключался в том, чтобы проксировать все запросы, сделанные на www.xyz/nodeApp
на порт 8142, откуда сервер узла подхватит.
Я добавил следующую конфигурацию прокси в файл nginx из www.xyz.com
.
location ~ ^/nodeApp(.*)$ {
proxy_http_version 1.1;
proxy_pass_request_body on;
proxy_set_header Host $host;
proxy_set_header Scheme $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8142$1$is_args$args;
proxy_buffering off;
}
При попадании в www.xyz.com/nodeApp/
, все работает. Узловой сервер принимает запрос и обслуживает css
и js
файлы по ссылке www.xyz.com/nodeApp/app.js
и т.п.
При попадании в www.xyz.com/nodeApp
, это не работает. Узловой сервер принимает запрос и обслуживает html
страница правильно, но css
и js
файлы обслуживаются по ссылке www.xyz.com/app.js
и т.д. Так приложение ломается.
Где я не прав?
var express = require("express");
var app = express();
app.use(express.static(__dirname + '/build'));
var port = process.env.PORT || 8142;
app.listen(port, function() {
console.log("Listening on " + port);
});
Вам следует упростить конфиг:
location /nodeApp/ {
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Scheme $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8142/;
proxy_buffering off;
}
В этом случае nginx позаботится о конце слэша. Видеть http://nginx.org/r/location
Если местоположение определяется строкой префикса, которая заканчивается символом косой черты, и запросы обрабатываются одним из
proxy_pass
, [...], то выполняется специальная обработка. В ответ на запрос с URI, равным этой строке, но без косой черты в конце, постоянное перенаправление с кодом 301 будет возвращено на запрошенный URI с добавленной косой чертой.
Также нет необходимости в переменных в proxy_pass
. Nginx заменит префикс /nodeApp/
с участием /
и автоматически добавлять строки запроса.