nginx 反向代理将 URL 中的子域名传递到后端

nginx 反向代理将 URL 中的子域名传递到后端

使用 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;
}

相关内容