![重写模块是否适合从 nginx 代理不同的 expressjs 路由?](https://linux22.com/image/672849/%E9%87%8D%E5%86%99%E6%A8%A1%E5%9D%97%E6%98%AF%E5%90%A6%E9%80%82%E5%90%88%E4%BB%8E%20nginx%20%E4%BB%A3%E7%90%86%E4%B8%8D%E5%90%8C%E7%9A%84%20expressjs%20%E8%B7%AF%E7%94%B1%EF%BC%9F.png)
我有一个在 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;
}
看这个文件了解详情。