Настройка приложения узла вместе с сервером nginx

Я пытаюсь настроить новый узел вместе с моим предыдущим приложением PHP.

Сценарий

  • Приложение php работает на ] www.xyz.com . Он обслуживается с помощью nginx.
  • Приложение узла обслуживается через сервер NodeJs на порту 8142.

Я хочу серверировать приложение 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);
});
1
задан 27 November 2015 в 09:45
1 ответ

Вам следует упростить конфигурацию:

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 / на / и автоматически добавит строки запроса.

3
ответ дан 3 December 2019 в 18:37

Теги

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