在代理路由的情况下获取原始请求 url

Getting original request url in case of proxy routing

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

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

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

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

不幸的是,网络中没有任何“标准”,如果在您的 Host 中它读错了 url 那么唯一的选择是向您的代理添加一个 header 以传递给你的应用程序。在 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!
    }
应用收到

结果 headers:

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 =)