diff --git a/app.js b/app.js
index 34a107ae1..050970b35 100644
--- a/app.js
+++ b/app.js
@@ -181,7 +181,7 @@ app.use(flash())
// passport
app.use(passport.initialize())
-app.use(useUnless(['/status', '/metrics'], passport.session()))
+app.use(useUnless(['/status', '/metrics', '/_health'], passport.session()))
// check uri is valid before going further
app.use(require('./lib/web/middleware/checkURIValid'))
diff --git a/lib/web/statusRouter.js b/lib/web/statusRouter.js
index f2d0bddf0..3f49b211a 100644
--- a/lib/web/statusRouter.js
+++ b/lib/web/statusRouter.js
@@ -12,6 +12,16 @@ const { urlencodedParser } = require('./utils')
const statusRouter = module.exports = Router()
+statusRouter.get('/_health', function (req, res) {
+ res.set({
+ 'Cache-Control': 'private', // only cache by client
+ 'X-Robots-Tag': 'noindex, nofollow' // prevent crawling
+ })
+ res.send({
+ ready: !realtime.maintenance
+ })
+})
+
// get status
statusRouter.get('/status', function (req, res, next) {
realtime.getStatus(function (data) {
diff --git a/public/docs/release-notes.md b/public/docs/release-notes.md
index 752450cc2..c2bb55f3c 100644
--- a/public/docs/release-notes.md
+++ b/public/docs/release-notes.md
@@ -5,6 +5,7 @@
### Enhancements
- Extend boolean environment variable parsing with other positive answers and case insensitivity.
- Allow setting of `documentMaxLength` via `CMD_DOCUMENT_MAX_LENGTH` environment variable.
+- Add dedicated healthcheck endpoint at /_health that is less resource intensive than /status.
## 1.9.7 2023-02-19