【发布时间】:2020-02-09 20:32:36
【问题描述】:
我们基于 PHP 的应用程序(定制,无框架)有时需要使用其基本完整 URL(例如,将 URL 存储在发送给客户端的文件中)。例如基于this question,我们的应用程序会猜测这一点(这是基于比较__FILE__ 和$SERVER 中的各种变量,如SCRIPT_NAME 和SERVER_NAME)。
现在我们需要在我们的应用程序前面设置一个 (nginx) 反向代理。假设我们将https://example.com/some/dir/onproxy/ 映射到http://backend/another/dir/onbackend/。
有没有办法从backend 上的代码中猜出公共 URL (https://example.com/some/dir/onproxy/)?
AFAIU(根据我的阅读和实验),这是不可能的(HTTP_HOST 可能会给example.com,但我没有发现任何表明some/dir/onproxy)但也许我遗漏了一些东西(一些变量或 nginx 配置选项)。
有什么想法吗?
如果不可能,唯一的解决方案就是在配置中存储https://example.com/some/dir/onproxy/,对吧?
编辑 1
按照@Progman 的建议,我在this question 上尝试了解决方案。我已经尝试了接受的答案和第二个最受好评的答案,但两者都返回(一些变体)后端的 URL (http://backend/another/dir/onbackend/)。
编辑 2
我忘了提到我想避免依赖代理中的 URL 重写。
【问题讨论】:
-
你检查过stackoverflow.com/questions/6768793/get-the-full-url-in-php吗?请edit您的问题包括您尝试链接问题中的解决方案时获得的结果。
-
澄清。您正在通过 Nginx 上传文件。 Nginx 更改 URL 中的路径并将新路径上的请求发送到 PHP。您正在寻求一种解决方案,以便 PHP 代码可以知道原始路径在被 Nginx 更改之前是什么?
-
@SteveE。它不是(仅)上传,它适用于每个请求,但是是的,我想要原始路径。例如,当客户端请求
https://example.com/some/dir/onproxy/subdir/feature.php(由代理转换为http://backend/another/dir/onbackend/subdir/feature.php)时,脚本feature.php必须知道基本URL 是https://example.com/some/dir/onproxy/。 -
@Progman 我会尽快更新问题。
标签: php reverse-proxy nginx-reverse-proxy