@lohmag

Как настроить nginx+express.js?

Есть такой конфиг в nginx:
location /mac-address/ {
            proxy_pass http://127.0.0.1:8001/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-NginX-Proxy true;
            proxy_redirect off;

Прокидывает на node приложение, которое дальше маршрутизирует внутри себя, в приложении используется express.js/ Маршрутизация работает нормально
app.get('/login', function(request, response) {}
Но если добавить редирект внутри express - res.redirect('/login');, то начинается переход по кривым ссылкам, например вместо mysite/mac-address/login делается GET запрос на mysite/login, проблема как я понимаю в nginx, но понять как ее устранить у меня не получается.
app.get('/', ensureAuthenticated,
   function(request, response) {
  fs.readFile('../index.html', function(err, file) {
    if (err) {
      // write an error response or nothing here
      return;
    }
    response.writeHead(200, {'Content-Type': 'text/html'});
    response.end(file, "utf-8");
  });
});

function ensureAuthenticated(req, res, next) {
  if (req.isAuthenticated()) {
    return next();
  } else {
   res.redirect('/login');
  }
}
  • Вопрос задан
  • 2631 просмотр
Решения вопроса 1
@lohmag Автор вопроса
Цель - сделать чтобы url mysite/mac-address не отличался от просто корня / И чтобы node приложение вообще не знало о существовании mac-address.
P.S. Удалось настроить редирект как хотел, так и не понял почему сразу не получилось

location /mac-address/ {
            proxy_pass http://127.0.0.1:8001/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-NginX-Proxy true;
            proxy_redirect / /mac-address/;
        }

app.post('/login',
   passport.authenticate('local', { failureRedirect: '/login' }),
   function(req, res) {
     res.redirect('/');
   });
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
BuriK666
@BuriK666
Компьютерный псих
Наверное так:
proxy_redirect / /mac-address/;

nginx.org/ru/docs/http/ngx_http_proxy_module.html#...
Ответ написан
Комментировать
@s2dent
Так это логично, res.redirect('/login'); означает, что клиенту, в HTTP заголовках, будет выдан статус с кодом 302 и адрес редирректа, куда должен перейти клиент (браузер). Т.е., допустим, пользователь заходит по адресу "mysite/mac-address/", а сервер перенаправляет его на "mysite/login", куда он и пытается достучаться, естественно Nginx этот запрос не обработает, а вот, если будет "res.redirect('/mac-address/login');", то всё должно работать так, как хочется.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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