我正在构建一个带有自包含HTTP服务器的应用程序,可以直接访问,也可以放在反向代理(如Apache mod_proxy
)之后。
所以,假设我的应用程序在端口8080上运行,你就像这样设置你的Apache:
ProxyPass /myapp http://localhost:8080
ProxyPassReverse /myapp http://localhost:8080
这将导致进入主{Apache}服务器的HTTP请求被/myapp/*
代理到我的应用程序。如果请求有GET /myapp/bar
,我的应用程序会看到GET /bar
。这是应该的。
出现的问题是生成必须从我的应用程序的URI空间转换的URI,以便通过代理正常工作(即前置/myapp/
)。
ProxyPassReverse
指令负责处理HTTP头中的URI(重定向等等)。但是这不处理由我的应用程序或静态文件和模板生成的HTML中的URI。
我知道像mod_proxy_html
这样的过滤器,但这是一个非标准的Apache模块,无论如何,这些过滤器可能无法用于其他能够充当其他功能的前端Web服务器反向代理。
所以我想出了一些可能的策略:
要求在包含代理路径的某处设置环境变量,并将其添加到所有生成的URI之前。这似乎不优雅;它打破了反向代理提供的封装。
将代理路径放在我的应用程序的配置文件中。与上述相同的反对意见。
在我的应用程序中仅使用相对URI。这可能有点棘手;我必须计算当前资源与链接所在位置之间的路径差异,并添加适当数量的../
'es。看起来很乱。另一个问题是有些东西必须生成绝对URI,比如RSS提要和生成的电子邮件。
在前端使用一些hacky Javascript来粘贴文档文本中的URI。从互操作性的角度来看,这似乎是一个非常可怕的想法。
在我的代码中使用单一的URI生成函数,并要求通过我的模板系统运行“静态”文件,如Javascript,CSS等。这是我现在倾向于的想法。
这一定是一个相当普遍的问题。你过去怎么接近它?什么有用,什么使事情变得更加困难?
答案 0 :(得分:7)