Я использую Nginx в качестве обратного прокси-сервера, а сервер Node.js Express - в качестве внутреннего.
При попытке загрузить пользовательскую страницу 404 в Express, Nginx всегда возвращает код состояния 200, даже если Express правильно отправляет обратно в Nginx код состояния 404.
В чем проблема с конфигурацией?
Я также использую EJS в качестве движка шаблонов, однако я не думаю, что это усугубляет проблему. Я использую PM2 в качестве диспетчера процессов для запуска сервера. Я протестировал без использования Nginx в качестве обратного прокси-сервера, и все в Express, кажется, работает нормально, т.е. Express правильно возвращает код состояния 404.
Вот мой Экспресс код:
const path = require('path')
const express = require('express')
const app = express()
const port = process.argv[2] || 3000
// Define paths for Express config
const publicDirPath = path.join(__dirname, '../public')
const viewsPath = path.join(__dirname, '../templates/views')
// Set EJS engine and views location
app.set('view engine', 'ejs')
app.set('views', viewsPath)
// Set static files location
app.use(express.static(publicDirPath))
app.get('/testing404', (req, res) => {
res.status(404).render('404', {
title: '404 error',
content: 'This is a 404 error page.'
})
})
app.listen(port, () => {
console.log('Server started at port ' + port + '!')
})
Вот моя соответствующая конфигурация Nginx:
upstream nthreads {
ip_hash;
server localhost:3000;
}
server {
root /var/www/[XXXXX]/html;
index index.html index.htm index.nginx-debian.html;
server_name [XXXXX] www.[XXXXX];
location / {
proxy_pass http://nthreads;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Как объяснено, я ожидал, что код состояния 404 будет возвращен из Nginx через внутренний сервер Node.js Express, но вместо этого я получаю код состояния 200, в чем тогда проблема?