首页 > 解决方案 > 使用 nginx 代理在非索引路由上快速创建 404 错误,但不在本地

问题描述

我有一个快速服务器来处理我的路由并使用 nginx 代理我的请求。但是,当访问不是 的路由时'/',我收到来自 express 的 404 错误。到目前为止,我已经查看了很多其他答案,它们似乎都是来自 nginx 的 404,并通过删除来解决try_files $uri $uri/ =404;,但对我来说并非如此。我还看到很多关于使用 express/nginx 的静态文件的 404-ing 的问题,但我认为这里不一定是这种情况。相反,我不确定我的情况与这些问题有何关系,因为我正在通过 pug 和 express 进行模板化。

我得到的错误是:

NotFoundError: Not Found
    at /root/my-app/app.js:27:10
    at Layer.handle [as handle_request] (/root/my-app/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/root/my-app/node_modules/express/lib/router/index.js:317:13)
    at /root/my-app/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/root/my-app/node_modules/express/lib/router/index.js:335:12)
    at next (/root/my-app/node_modules/express/lib/router/index.js:275:10)
    at /root/my-app/node_modules/express/lib/router/index.js:635:15
    at next (/root/my-app/node_modules/express/lib/router/index.js:260:14)
    at Function.handle (/root/my-app/node_modules/express/lib/router/index.js:174:3)
    at router (/root/my-app/node_modules/express/lib/router/index.js:47:12)

由(在 app.js 中)触发:

app.use((req, res, next) => {
    next(createError(404));
});

我的路由器看起来像:

router.get('/', (req, res) => {
    res.render('index');                        // does not give me 404 error
});

router.get('/other-route', (req, res) => {
    res.render('other-route-pug-file');         // gives me 404 error
});

我的 nginx 配置如下所示:

server {
    listen 80;
    server_name example.com;
    rewrite ^/(.*) https://example.com/$1 permanent;
}

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    # ssl config details

    server_name example.com www.example.com;

    location / {
        proxy_pass http://localhost:3000; # the port that my express server is listening to
        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 将我的应用程序路由到我的域时,才会出现此错误。在本地主机上我可以看到/other-route很好。我也不确定如何调试这样的事情,因为我不能真正console.log()轻松地去某个地方,而且我对通过 nginx 进行代理还很陌生,因此非常感谢任何一个领域/解决这个问题的帮助。谢谢!

标签: node.jsexpressnginx

解决方案


我解决了我的问题。我正在使用一种低效的方法在服务器和 github 上同步我的代码。yarn install从第一次克隆之后,我没有在我的目录中。我不知道为什么我不只是拉入服务器上的目录。我不一定确定为什么我的项目的其他部分正在工作,但这对我来说是固定的。谢谢您的帮助!


推荐阅读