![nginx 反向代理将 URL 中的子域名传递到后端](https://linux22.com/image/726847/nginx%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E5%B0%86%20URL%20%E4%B8%AD%E7%9A%84%E5%AD%90%E5%9F%9F%E5%90%8D%E4%BC%A0%E9%80%92%E5%88%B0%E5%90%8E%E7%AB%AF.png)
使用 nginx,是否可以为我的 React 应用程序代理传入 URL,以便与用户通过 React Router 处理数据变量的方式“区别”地看待它?
例如,用户转到https://foo.app.live.com
,我的应用程序将把传入请求视为http://localhost:3000/foo
。
更多示例:
https://foo.app.live.com
===http://localhost:3000/foo
https://foo.app.live.com/login
===http://localhost:3000/foo/login
https://foo.app.live.com/event/1
===http://localhost:3000/foo/event/1
我已经用这个块进行了测试,整个 URI 被添加到域的末尾:
location /(.*)$ {
proxy_pass http://localhost:3000/$1;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
我错过了什么?
答案1
您可以通过在位置块中使用带有 break 标志的 rewrite 指令来实现这一点。对于您的情况,它将是:
rewrite (.*) /foo$1 break;
使用此配置,您的 URI 将会改变,但仅限于上游服务器,用户不会注意到。有关更多详细信息,请参阅此处的 nginx 文档:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html 谢谢
答案2
尝试使用此版本:
location / {
proxy_pass http://localhost:3000/foo$uri;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}