问题描述
我们的反向代理需要一个 Apache 配置,以允许将任何子域 (any.example.com
) 重定向到保留子域 (any.server.local
) 的上游服务器。
我们发现 RewriteRules 指令有几个死胡同,而且没有可用的现成配方。
<VirtualHost example.com:443>
#any other directives you usually use
ProxyPassInterpolateEnv On
SetEnvIf Host "^([^.]*).example.com$" SUBDOMAIN=$1
SetEnvIf Host "^example.com$" SUBDOMAIN=www
ProxyPass / http://${SUBDOMAIN}.server.local/ interpolate
ProxyPassReverse / http://${SUBDOMAIN}.server.local/ interpolate
ServerName example.com
ServerAlias *.example.com
</VirtualHost>
- 表达式
ProxyPassInterpolateEnv On
允许您在 ProxyPass 和 ProxyPassReverse 指令中使用环境变量(请参阅 documentation)。 - 表达式
SetEnvIf Host "^([^.]*).example.com$" SUBDOMAIN=$1
获取主机名的子域部分,将其保存到$1
中并将其分配给变量SUBDOMAIN
。 - 表达式
SetEnvIf Host "^example.com$" SUBDOMAIN=www
将SUBDOMAIN
环境变量设置为www
,如果不存在子域(如在 http://example.com 中)。 - ProxyPass 和 ProxyPassReverse 指令中的参数
interpolate
允许它们使用${SUBDOMAIN}
环境变量。
因此:
any.example.com
被发送到 any.server.local
,并且
example.com
被发送到 www.server.local
此外,我们还配置了内部和外部 DNS,以便对 *.example.com
的任何请求都将分别发送到内部和外部反向代理地址。
对于 SSL,我们设置了来自 Let's Encrypt (*.example.com
)
我们希望这能帮助任何需要类似配置的人。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)