@step2n

Как передать ошибку 500 из node.js (express.js) в nginx?

Есть страница 500-ки, которая показывается в случае одной из 500-к:
error_page 500 501 502 503 504 @500;

    location @500 {
        internal;
        rewrite ^(.*)$ /500;
    }

    location = /500 {
        rewrite ^(.*)$ /500.$lang.html;
    }

    location ~ /500 {
        root $root/500/$bundle;
    }


Прекрасно отрабатывает, когда сервер не поднят.
Но как тогда её тестировать? Нужно каким-то образом сделать обработку урла, к примеру /500, которую будет делать nginx.

Что-то типа такого:
app.get('/503', function(req, res) {
    res.status(500).send('internal error');
});


Но ничего не происходит, как будто нужно подтюнить nginx.
  • Вопрос задан
  • 471 просмотр
Пригласить эксперта
Ответы на вопрос 1
Lynn
@Lynn
nginx, js, css
Надо подтюнить. По умолчанию nginx никак не пытается обрабатывать ответы от апстрима (от ноды), а просто передаёт их клиенту. Вам нужна директива proxy_intercept_errors.

Ну и обработка ошибки у вас написана странно.

В общем, должно быть как-то так:
error_page 500 501 502 503 504 @500;

location / {
  # проксирование в node
  proxy_pass http://127.0.0.1:3000;
  proxy_intercept_errors on;
}

location @500 {
  # internal не нужен, в именованый location по другому всё равно не попасть
  root $root/500/$bundle;
  rewrite ^ /500.$lang.html break;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы