我正在为一个应用程序创建一系列子域,每个子域通过 mod_proxy 获取自己的后端服务器。
我想避免每次发生这种情况时都生成新的虚拟主机,而是依靠命名方案(子域基于数字)。
假设域名promotion-4321.example.com
和后端服务器将监听端口4321
4321
我可以创建从主机名中提取(并捕获所有内容promotion-XXXX.example.com
)并使用它将请求定向到端口上的后端的apache 配置4321
吗?
答案1
首先,您需要捕获虚拟主机中服务器的所有请求:
<VirtualHost *:80 *:443>
# [ Server Domain ]
ServerName localhost
ServerAlias *
...
然后你需要创建一个规则来捕获你需要的信息
...
RewriteCond %{HTTP_HOST} promotion-(.*?)\.example\.com
RewriteRule (.*) http://backend.example.com:%1$1 [P,QSA]
...
%1
将是 RewriteCond 正则表达式捕获的变量$1
将是 RewriteRule 正则表达式捕获的当前 url 请求
如果您不想使用重写规则,您可以使用 ProxyRemoteMatch :
ProxyRemoteMatch promotion-(.*?)\.example\.com http://backend.example.com:$1