版本:nginx / 1.2.0 || (我知道风险,它的内部服务器)我如何设置一个系统, 17.hostname.com将作为proxy_pass http://192.168.56.17:80 (其中17将被replace为以前的数字主机名)
编辑: 正则expression式server_name和地图指令的解决scheme比这个,它使用邪恶的if指令 。
$ hostvariables包含客户端请求的主机名,尽pipe您需要稍微处理一下以获得所需的部分。 它看起来是实现这一目标的唯一方法是使用来自Rewrite模块的if和set指令,所以请尝试如下所示:
server_name *.hostname.com; if ($host ~* ^([0-9]+)\.hostname\.com$) { set $proxyhost 192.168.56.$1; } proxy_pass http://$proxyhost;
server_name ~^(?<subnum>[0-9]+)\.hostname\.com$; proxy_pass http://192.168.56.$subnum;
map $host $backend { default 1; ~*^(?P<number>[0-9]+)\.hostname\.com$ $number; # FIXME: [0-9]+ must be replaced to regex with accurate check 1..254 range # for example [1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4] or similar } server { server_name *.hostname.com; location / { proxy_pass http://192.168.56.$backend:80; } }
请记住: 如果是邪恶 ! 😉