我有一个在 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;
}
看这个文件了解详情。