重写模块是否适合从 nginx 代理不同的 expressjs 路由?

重写模块是否适合从 nginx 代理不同的 expressjs 路由?

我有一个在 docker 容器中运行的 expressjs 节点服务器。在这个例子中,它只有 1 个路由:GET,/user它返回一个简单的 JSON 对象。

我还有一个 nginx 服务器,使用以下命令代理该 express 服务器:

location /api {
    rewrite ^/api/(.*) /$1 break;
    proxy_pass http://nodeapp:3000/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
  }

在我的项目中,index.js我使用 url 创建了一个 XMLHttpRequest /api/user

重写模块是否是rewrite ^/api/(.*) /$1 break;代理 Express 应用中路由的有效解决方案?还有其他选择吗?虽然这确实有效,但对于我来说,使用正则表达式似乎有些“不对劲”。我不做 DevOps 工作,只摆弄 nginx,所以如果有更好的解决方案,如果您能为我指明正确的方向,我将不胜感激。

答案1

在您的位置上简单地添加一个斜杠应该可以nginx隐式执行相同的转换。

location /api/ {
    proxy_pass http://nodeapp:3000/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
}

这个文件了解详情。

相关内容