繁体   English   中英

使用Node.js作为后端服务器的Nginx始终返回状态码200而不是404

[英]Nginx with Node.js as backend server always returns status code 200 instead of 404

我使用Nginx作为反向代理,以Node.js Express服务器作为后端。

尝试在Express上加载自定义的404页面时,即使Express正确地将404状态代码发送回Nginx,Nginx始终返回200状态代码。

配置有什么问题?

我也将EJS用作模板引擎,但是,我认为它不会导致问题。 我使用PM2作为进程管理器来运行服务器。 我已经在不使用Nginx作为反向代理的情况下进行了测试,并且Express中的所有功能似乎都可以正常工作,即Express正确返回了404状态代码。

这是我的Express代码:

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;
        }

}

如前所述,我希望Nginx通过Node.js Express后端服务器返回404状态代码,但我却得到了200状态代码,那又是什么问题呢?

Nginx正确返回200,因为您要求一个存在的文档。 如果您请求的文档不存在,则只会得到404。 尝试这样做。 (以及是否在其他服务器上存在这样的文档是完全无关的。)

当您在真正的地方拉404页面时,它将返回200,因为您请求的页面确实存在。

对于Ngnix服务器,您可以将NGINX配置为指向该页面以查看真正的404错误。 完成此操作后,当您想在地方重定向您的应用程序时,只需将其重定向到虚假页面即可

事实证明一切正常。 我忘记了重新加载服务器进程,并且它正在运行没有404状态代码的旧代码。 Nginx确实确实正确转发了后端Node.js Express服务器返回的404状态代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM