【问题标题】:Getting original request url in case of proxy routing在代理路由的情况下获取原始请求 url
【发布时间】:2017-09-08 03:05:28
【问题描述】:

我必须在请求期间生成一个 URL。此 URL 必须通过绝对路径(电子邮件中的链接到调用用户)指向应用程序本身。 现在我遇到的问题是,在某些情况下,应用程序在使用不同代理的环境中运行。不同的用户只能访问其中一个代理,但不能访问应用程序本身。所以我必须使用发送到代理的 URL,而不是代理用来调用应用程序的 URL。

目前我使用 HttpRequest.Current 来构建 URL。 在这种情况下会传送错误的 URL。

.net 类或代理标准(HTTP-Headers,...)中是否有任何属性来保留原始 URL?

【问题讨论】:

  • 代理不应更改 URL。如果代理一直在更改 URL,它们将无用。您是否首先仔细检查了您是如何向代理发出请求的?
  • 我已经创建了一个测试设置来检查请求发生了什么,并且 URL 发生了变化......也许使用的代理没有很好地实现......但我必须处理这种情况。 (我说的是应用程序接收的 URL,而不是浏览器中的 URL)
  • 网址是通过什么方式改变的?
  • 如果代理使用规则来重写请求,它还需要以某种方式附加原始 URL 以使其在目标服务器上保持可用。但是不要被代理使用完全限定的 URL(包括方案和权限)并发出仅包含路径/资源的上游请求所误导。主机头加上使用的方案加上请求的资源应该仍然是相同的 URL。为了说明这一点,如果不使用代理,客户端应该发出与代理代表它的请求相同的请求。
  • 使用“url1”调用代理并将请求重定向到使用“url2”的应用程序。在 HttpRequest.Current 对象中仅使用“url2”。我也找不到任何标题或类似的东西。也许这只是因为代理或其在我们测试环境中的配置,但只要能发生这种情况,我必须能够处理这种情况......

标签: c# asp.net asp.net-mvc proxy http-proxy


【解决方案1】:

不幸的是,网络中没有任何“标准”,如果在您的Host 中它读取了错误的 url,那么唯一的选择是向您的代理添加一个标头以传递给您的应用程序。如果是 nginx,我在 conf 文件中使用了类似的东西:

location /couch/api/ {
        proxy_pass         https://0.0.0.0:5030;
        proxy_http_version 1.1;
 
        proxy_cache_bypass $http_upgrade;
        
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;  
        
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   X-Forwarded-Host $host; # <-- this is the saver!
    }

应用收到的结果标头:

Host : 0.0.0.0:5040 <--- okay this is wrong.. it's behind proxy
X-Forwarded-For : 180.291.138.555 
X-Forwarded-Proto : https 
X-Forwarded-Host : mysupadomain.com <--- success =)

【讨论】:

    【解决方案2】:

    目前我使用的解决方案不是很好但可以工作: 我正在使用应用程序的登录来请求客户端 url(登录请求发送客户端 url)并将此信息存储在用户会话中。所以我可以使用它来生成所需的 URL。

    【讨论】:

      猜你喜欢
      • 2014-09-30
      • 2013-01-24
      • 2020-11-29
      • 2012-04-15
      • 1970-01-01
      • 2014-02-24
      • 2022-06-17
      • 2017-02-13
      • 2017-10-01
      相关资源
      最近更新 更多