如何在代理后面找到应用程序的基本URL?

马修·杜波依斯(Mathieu Dubois)

我们基于PHP的应用程序(定制的,无框架的)有时需要使用其基本完整URL(例如,将URL存储在发送给客户端的文件中)。例如,基于这个问题,我们的应用程序对此进行了猜测(这是基于like和中的__FILE__各种变量的比较)。$SERVERSCRIPT_NAMESERVER_NAME

现在,我们需要在我们的应用程序之前设置一个(nginx)反向代理。假设我们映射https://example.com/some/dir/onproxy/http://backend/another/dir/onbackend/

有没有办法https://example.com/some/dir/onproxy/从代码中猜测公共URL(backend

AFAIU(从我的阅读和实验中得出)是不可能的(HTTP_HOST可能给出,example.com但是我什么都没发现some/dir/onproxy),但可能我缺少了一些东西(某些变量或nginx配置选项)。

任何想法 ?

如果不可能的话,唯一的解决方案是将其存储https://example.com/some/dir/onproxy/在配置中,对吗?

编辑1

正如@Progman所建议的那样,我尝试了有关此问题的解决方案我已经尝试了接受的答案和投票率第二高的答案,但是都返回了后端(http://backend/another/dir/onbackend/的URL(该URL的某些变化)。

编辑2

我忘了提及我要避免依赖代理中的URL重写。

史蒂夫·E。

由于Nginx会在到达PHP后端之前更改请求,因此解决方案是以某种方式将原始请求数据添加到代理请求中。

一个常用的约定是将原始数据添加为额外的HTTP标头。有关此示例,请参见X_Forwarded_For

要将原始请求路径添加为新的标头,请向Nginx添加proxy_set_header指令。

location /some/dir/onproxy/ {
    rewrite ^/some/dir/onproxy/(.*)$  /another/dir/onbackend/$1 break;

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Request-URI $request; #** This adds the original path as a header **
    proxy_set_header Host $http_host; # **Optional, will retain the original host name**
    proxy_pass http://backend;
}

与您的配置类似的操作会将原始请求代理到后端的PHP Web服务器。它确实假定后端是HTTP服务器,而不是PHP-FPM。

在PHP中,获取单个HTTP标头值的最快方法是通过$ _SERVER原始请求路径将位于中$_SERVER['HTTP_X_REQUEST_URI']

这只是一个示例,您可能需要测试和调试应用程序以完善解决方案。php_info() ; 是对PHP环境有用的调试工具,但是对恶意参与者也很有用,因此请尽快从代码中删除代码或采取其他措施以确保它不会被暴露。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在代理后面配置 node.js (express.js) 应用程序?

来自分类Dev

反向代理后面的应用程序的Identity Server重定向URL

来自分类Dev

如何使用curl / postman访问Azure AD应用程序代理后面的网页

来自分类Dev

如何在Android的build.gradle文件中为flutter应用程序定义基本URL?

来自分类Dev

如何在Web应用程序中设置用户代理?

来自分类Dev

如何找到流星部署应用程序的wss URL?

来自分类Dev

如何在我的应用程序中找到StackOverflowException的来源

来自分类Dev

如何在android中找到附近的应用程序用户?

来自分类Dev

如何在我的应用程序中找到StackOverflowException的来源

来自分类Dev

更改Laravel应用程序的基本URL

来自分类Dev

在 Azure 应用程序网关后面托管 WCF 服务时如何获取正确的 WSDL URL?

来自分类Dev

如何在Apache中对mod_proxy后面的应用程序进行密码保护?

来自分类Dev

如何在HAProxy后面部署node.js express应用程序?

来自分类Dev

如何在不同端口后面的单个JBoss AS 6实例上运行不同的应用程序?

来自分类Dev

如何在Apache中对mod_proxy后面的应用程序进行密码保护?

来自分类Dev

如何在html asp.net应用程序中的文本后面显示更多信息

来自分类Dev

如何在Asp.net Web窗体应用程序中的代码后面设置SelectParameter?

来自分类Dev

如何在 Ionic 应用程序中隐藏状态栏后面的栏?

来自分类Dev

基本 Spring JDBC 应用程序,未找到 JdbcTemplate bean

来自分类Dev

Thymeleaf将应用程序上下文添加到apache代理后面的应用程序网址

来自分类Dev

如何在yii Web应用程序中创建URL

来自分类Dev

如何在Appium中配置应用程序的URL?

来自分类Dev

如何在应用程序中获取项目 URL?

来自分类Dev

如何在 django 应用程序中创建分层 url?

来自分类Dev

带有SSL的代理后面的Rails应用程序将路径呈现为“ http://”

来自分类Dev

设置nginx反向代理后面的ASP NET Core MVC应用程序的虚拟路径

来自分类Dev

可以同时验证反向代理后面的多个应用程序吗?

来自分类Dev

如何在QtWebEngine QML应用程序中设置用户代理

来自分类Dev

如何在附加Java代理运行弹簧启动应用程序

Related 相关文章

  1. 1

    如何在代理后面配置 node.js (express.js) 应用程序?

  2. 2

    反向代理后面的应用程序的Identity Server重定向URL

  3. 3

    如何使用curl / postman访问Azure AD应用程序代理后面的网页

  4. 4

    如何在Android的build.gradle文件中为flutter应用程序定义基本URL?

  5. 5

    如何在Web应用程序中设置用户代理?

  6. 6

    如何找到流星部署应用程序的wss URL?

  7. 7

    如何在我的应用程序中找到StackOverflowException的来源

  8. 8

    如何在android中找到附近的应用程序用户?

  9. 9

    如何在我的应用程序中找到StackOverflowException的来源

  10. 10

    更改Laravel应用程序的基本URL

  11. 11

    在 Azure 应用程序网关后面托管 WCF 服务时如何获取正确的 WSDL URL?

  12. 12

    如何在Apache中对mod_proxy后面的应用程序进行密码保护?

  13. 13

    如何在HAProxy后面部署node.js express应用程序?

  14. 14

    如何在不同端口后面的单个JBoss AS 6实例上运行不同的应用程序?

  15. 15

    如何在Apache中对mod_proxy后面的应用程序进行密码保护?

  16. 16

    如何在html asp.net应用程序中的文本后面显示更多信息

  17. 17

    如何在Asp.net Web窗体应用程序中的代码后面设置SelectParameter?

  18. 18

    如何在 Ionic 应用程序中隐藏状态栏后面的栏?

  19. 19

    基本 Spring JDBC 应用程序,未找到 JdbcTemplate bean

  20. 20

    Thymeleaf将应用程序上下文添加到apache代理后面的应用程序网址

  21. 21

    如何在yii Web应用程序中创建URL

  22. 22

    如何在Appium中配置应用程序的URL?

  23. 23

    如何在应用程序中获取项目 URL?

  24. 24

    如何在 django 应用程序中创建分层 url?

  25. 25

    带有SSL的代理后面的Rails应用程序将路径呈现为“ http://”

  26. 26

    设置nginx反向代理后面的ASP NET Core MVC应用程序的虚拟路径

  27. 27

    可以同时验证反向代理后面的多个应用程序吗?

  28. 28

    如何在QtWebEngine QML应用程序中设置用户代理

  29. 29

    如何在附加Java代理运行弹簧启动应用程序

热门标签

归档