如何通过从路径中提取主机来将 Apache 配置为反向代理

darth_mall

我想将 Apache 配置为反向代理,通过解析请求的 URL 的路径来动态确定要代理的 URL。

例如,URLhttp://proxy-server/app/your-app将被代理http://your-app:8000/http://proxy-server/app/your-app/some/path转到http://your-app:8000/some/path

我在下面的配置中遇到的问题是它http://proxy-server/app/your-app/工作得很好,但http://proxy-server/app/your-app/some/path被重定向到http://proxy-server/some/path,这会产生 404 错误。

我试过mod_proxy像这样使用

ProxyPassMatch "^/app/([^/]+)(?:/(.*))?$" "http://$1:8000/$2"

我试过了 mod_rewrite

RewriteEngine On
RewriteBase "/app/"
RewriteRule "^([^/]+)/?$" "http://$1:8000/" [E=CONTAINER:$1,P]
RewriteRule "^([^/]+)/(.+)$" "http://$1:8000/$2" [E=CONTAINER:$1,P]

ProxyPassInterpolateEnv On
ProxyPassReverse "/app/" "http://${CONTAINER}:8000/" interpolate

当我curl -D - http://proxy-server/app/your-app收到HTTP/1.1 200 OK回复时。当我curl -D - http://proxy-server/app/your-app/some/path我得到一个HTTP/1.1 301 Move Permanently与响应Location: /some/path/

我不确定 301 来自哪里。Apache 和在该主机上运行的应用程序都不应该返回 301,但是Location标头让我认为可能是反向代理没有设置为从它代理的远程正确重写 URL,这就是为什么我添加了ProxyPassReverse上面指令。但我仍然无法让它工作。

任何有关如何设置它的见解将不胜感激。

darth_mall

我确实ProxyPassReverse为这个场景错误地配置指令。

我代理的远程服务器(Django 应用程序)通过将Location标头设置为路径而不是完整 URL 来发出重定向所以我不得不像这样配置Apache:

RewriteEngine On
RewriteRule "^/app/([^/]+)(?:/.*)?$" - [E=CONTAINER:$1]

ProxyPassInterpolateEnv On
ProxyPass "/app/${CONTAINER}/" "http://${CONTAINER}:8000/" interpolate
ProxyPassReverse "/app/${CONTAINER}/" "http://${CONTAINER}:8000/" interpolate

# This guarantees that any Location headers that are just absolute paths
# get rewritten
ProxyPassReverse "/app/${CONTAINER}/" "/" interpolate

最后一行是关键。它告诉 Apache,如果它得到一个Location: /some/path/标头,它应该将它重写为Location: /app/your-app/some/path/. 第一个ProxyPassReverse指令将引发只有当阿帕奇已经收到Location: http://${CONTAINER}:8000/some/path/

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将 apache 配置为 asp.net core 的反向代理

来自分类Dev

Apache 反向代理配置更改

来自分类Dev

将Nginx配置为反向代理以进行mqtt通信

来自分类Dev

如何使用正向代理后面的Apache反向代理主机

来自分类Dev

如何配置nginx反向代理

来自分类Dev

Kibana 5.0 Apache代理和反向代理配置失败

来自分类Dev

如何在不中断客户端与服务器之间的https隧道的情况下配置apache反向代理?

来自分类Dev

如何在不中断客户端与服务器之间的https隧道的情况下配置apache反向代理?

来自分类Dev

如何确定Apache是用作正向代理还是反向代理?

来自分类Dev

如何将Web应用程序配置为仅接受来自反向代理的连接

来自分类Dev

如何将nginx配置为使用uWSGI在不同子网上运行的不同nginx的反向代理?

来自分类Dev

将Nginx配置为Wildfly Web应用程序的反向代理

来自分类Dev

如何在Node.js Express上为gitlab配置反向代理规则

来自分类Dev

Docker容器中Apache反向代理的最小配置

来自分类Dev

Docker容器的Apache2反向代理配置

来自分类Dev

Apache从80端口到8000端口的反向代理配置

来自分类Dev

我被困在尝试使用 apache 配置 SSL 反向代理

来自分类Dev

apache反向代理hhtps

来自分类Dev

使用 apache 反向代理

来自分类Dev

同时使用Apache反向代理和虚拟主机

来自分类Dev

通过 Apache 反向代理进行 Spring Boot 证书认证

来自分类Dev

如何配置OwnCloud和反向代理?

来自分类Dev

如何在Apache上针对特定网址使用反向代理?

来自分类Dev

Apache反向代理匹配请求

来自分类Dev

Apache反向代理无限循环

来自分类Dev

Apache骆驼作为反向代理

来自分类Dev

Bitnami Apache代理配置

来自分类Dev

如何配置NGINX作为不同端口号的反向代理?

来自分类Dev

嗨,如何配置Apache HttpClient绕过本地地址的代理?

Related 相关文章

  1. 1

    如何将 apache 配置为 asp.net core 的反向代理

  2. 2

    Apache 反向代理配置更改

  3. 3

    将Nginx配置为反向代理以进行mqtt通信

  4. 4

    如何使用正向代理后面的Apache反向代理主机

  5. 5

    如何配置nginx反向代理

  6. 6

    Kibana 5.0 Apache代理和反向代理配置失败

  7. 7

    如何在不中断客户端与服务器之间的https隧道的情况下配置apache反向代理?

  8. 8

    如何在不中断客户端与服务器之间的https隧道的情况下配置apache反向代理?

  9. 9

    如何确定Apache是用作正向代理还是反向代理?

  10. 10

    如何将Web应用程序配置为仅接受来自反向代理的连接

  11. 11

    如何将nginx配置为使用uWSGI在不同子网上运行的不同nginx的反向代理?

  12. 12

    将Nginx配置为Wildfly Web应用程序的反向代理

  13. 13

    如何在Node.js Express上为gitlab配置反向代理规则

  14. 14

    Docker容器中Apache反向代理的最小配置

  15. 15

    Docker容器的Apache2反向代理配置

  16. 16

    Apache从80端口到8000端口的反向代理配置

  17. 17

    我被困在尝试使用 apache 配置 SSL 反向代理

  18. 18

    apache反向代理hhtps

  19. 19

    使用 apache 反向代理

  20. 20

    同时使用Apache反向代理和虚拟主机

  21. 21

    通过 Apache 反向代理进行 Spring Boot 证书认证

  22. 22

    如何配置OwnCloud和反向代理?

  23. 23

    如何在Apache上针对特定网址使用反向代理?

  24. 24

    Apache反向代理匹配请求

  25. 25

    Apache反向代理无限循环

  26. 26

    Apache骆驼作为反向代理

  27. 27

    Bitnami Apache代理配置

  28. 28

    如何配置NGINX作为不同端口号的反向代理?

  29. 29

    嗨,如何配置Apache HttpClient绕过本地地址的代理?

热门标签

归档