AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 792637
Accepted
Marc Salinas
Marc Salinas
Asked: 2016-07-30 00:03:09 +0800 CST2016-07-30 00:03:09 +0800 CST 2016-07-30 00:03:09 +0800 CST

代理静态内容仅适用于代理请求

  • 772

我有一个 apache 在“”上为一个本地应用程序提供服务/,其静态文件在“ /static”上

还有另一个应用程序mod_proxy:

ProxyPreserveHost On
ProxyPass "/example" "http://127.0.0.1:9090/"
ProxyPassReverse "/example" "http://127.0.0.1:9090/"

这个应用程序确实有自己的静态内容“ /static”但是当它来自第一个代理文件时。

¿ 有没有办法/static根据recuest的来源来为每个人提供“”?

static-content reverse-proxy apache-2.4
  • 1 1 个回答
  • 1141 Views

1 个回答

  • Voted
  1. Best Answer
    Tom
    2016-07-30T04:10:43+08:002016-07-30T04:10:43+08:00

    鉴于您的示例,我希望在使用代理时http://127.0.0.1:9090/static可以访问位于的 Tomcat 静态文件。http://127.0.0.1/example/static

    可能
    的解决方案1 ​​我认为最佳实践解决方案是更改为在tomcat应用程序中使用相对路径而不是绝对路径,因此静态文件使用后一种路径;

    <img src="static/my_image.jpg"></img>
    

    或服务器根目录;

    <img src="/example/static/my_image.jpg"></img>
    

    这将正确地提供图像,例如

    http://127.0.0.1/example/static/my_image.jpg
    

    可能的解决方案 2
    将 apache 静态文件重命名为其他名称,并将 /static 路径显式代理为 tomcat;

    # move the locate apache static files to somewhere else;
    # http://127.0.0.1/static_apache etc
    ProxyPass /static http://127.0.0.1:9090/static
    ProxyPassReverse /static http://127.0.0.1:9090/static
    ProxyPass "/example" "http://127.0.0.1:9090"
    ProxyPassReverse "/example" "http://127.0.0.1:9090"
    

    另请注意:

    订购 ProxyPass 指令

    已配置的 ProxyPass 和 ProxyPassMatch 规则按照配置顺序进行检查。第一条匹配的规则获胜。所以通常你应该首先从最长的 URL 开始对冲突的 ProxyPass 规则进行排序。否则,更长 URL 的后续规则将被任何使用 URL 前导子字符串的早期规则隐藏。

    可能是hacky解决方案

    通过检查referer头来检测请求是否是从tomcat应用发起的;

    RewriteEngine on
    # match the app in the referer before processing the rule
    RewriteCond %{HTTP_REFERER} /example
    # reverse-proxy the request to the back-end
    RewriteRule ^/static(/.*)?$ http://127.0.0.1:9090/static$1 [P]
    

    (我没有测试最后一个解决方案,因为它似乎只是一种新颖的做事方式......)

    • 0

相关问题

  • 请求静态内容时 IIS7 返回空白

  • Apache2 + PHP 静态目录

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 多个 Web 服务器提供相同的静态内容

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve