У меня есть экспресс-приложение, которое отлично работает в моей локальной среде на порту 3001. Мне нужно развернуть его на производственном сервере, на котором nginx прослушивает порт 80. Ниже приведены некоторые из экспресс-маршрутов
router.get('/', (req, res) => {
//home page, show login page
});
router.post('/login', (req, res) => {
if(errors){
//invalid credentials
return res.redirect('..');
}
//successful login, redirect to admin area
return res.redirect('../admin');
})
и аналогичные маршруты для аутентифицированных пользователей-администраторов.Маршруты не работают должным образом при развертывании на nginx с использованием обратного прокси.Параметры обратного прокси-сервера nginx следующие:
location /v2manager/ {
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:3001/;
}
Я хочу, чтобы приложение было доступно по маршруту v2manager
в моем рабочем домене, например example.com/v2manager
.Таким образом, все маршруты становятся следующими:
example.com/v2manager/
для домашней страницы example.com/v2manager/login
для POST-маршрута входа в систему и example.com/v2manager/admin
для администратораarea
Однако, перенаправления не работают должным образом, при неудачном входе в систему return res.redirect('..')
перенаправляет меня на example.com
, который имеет другую страницу, тогда как он должен перенаправить на example.com/v2manager
Я могу изменить маршруты своего приложения, добавив v2manager
везде, но маршрут v2manager
может часто меняться в зависимости от среды и версий.Кроме того, решение, которое не будет препятствовать локальной среде, чтобы localhost:3000/login
работало всегда