【问题标题】:I need to do a redirect on a proxied path in Nginx我需要在 Nginx 中的代理路径上进行重定向
【发布时间】:2017-04-24 05:17:30
【问题描述】:

我正在使用一个结构奇怪的应用程序,我需要代理 / 并将其重定向到子目录(除非有人能想出更好的解决方案)。以下是应用使用的路径布局:

var securePaths = [
    "/someaction",
    "/anotheraction",
    "/athirdaction",
    "/client/interfaceishere/index.html" //path to client interface
];

您可以看到客户端与应用程序接口的位置是两个级别,因此我需要重定向到那里。我无法在那里代理该应用程序,因为它需要访问诸如“/someaction”之类的顶级路径。我已将 nginx 配置为应用程序的代理,如下所示:

upstream socket_nodes {
  ip_hash;
  server 127.0.0.1:8080;
}

server {
  server_name myapp.example.com;
  listen 80;


  location / {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:8080;
  }
}

让用户访问“/client/interfaceishere/index.html”的最佳方法是什么?

这个应用程序的以前用户通过 iframe 解决了这个问题,这对我来说不是一个选项。

【问题讨论】:

  • 您可以使用 location /path/..... 或添加到 proxy_pass 的路径,这取决于后端将看到什么,使用 curl 检查响应并检查日志文件以查看您的位置去。
  • 不起作用,我可以设置通配符位置吗?喜欢:位置/*
  • 我想我要问的是我只想要一个重定向路径(/),其他一切都由代理处理。因此,代理的通配符路由和 / 的重定向可以工作,但我在通配符位置找不到文档。
  • so a proxy_pass 127.0.0.1:8080/client/interfaceishere;不工作?如果位置是 / 并且您询问“/client/interfaceishere/”,那么 proxy_pass 应该通过相同的路径 (uri),当您询问“/client/interfaceishere/”时日志文件会说什么?我刚刚检查了我的 tomcat 后端配置,它确实/在任何路径通过的地方。
  • 这确实有效......但它将所有内容代理到: 127.0.0.1:8080/client/interfaceishere 所以 /someaction 的路径实际上像这样传递 127.0.0.1:8080/client/interfaceishere/ someaction 应该是 127.0.0.1:8080/someaction。

标签: nginx proxy url-redirection


【解决方案1】:

然后您需要将其拆分,位置块内的路径而不是使用 / 传递所有内容。您确实首先需要考虑并写下每条路径需要去的地方,然后使用“地图”来重定向或/和定位块来处理事情。您可以使用位置块来分别处理每个 uri。

【讨论】:

    猜你喜欢
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    相关资源
    最近更新 更多