版本:nginx/1.2.0 ||(我知道风险,它用于内部服务器)我该如何设置一个系统,17.hostname.com
将其作为 proxy_pass http://192.168.56.17:80
(其中 17 将被替换为主机名之前的任何数字)
答案1
编辑:这正则表达式 服务器名称和map 指令解决方案比这个更好,它使用evil if 指令。
这$主机变量包含客户端请求的主机名,尽管您需要对其进行一些处理才能获得所需的部分。看起来实现此目的的唯一方法是使用如果和放来自 Rewrite 模块的指令,因此尝试如下操作:
server_name *.hostname.com;
if ($host ~* ^([0-9]+)\.hostname\.com$) {
set $proxyhost 192.168.56.$1;
}
proxy_pass http://$proxyhost;
答案2
server_name ~^(?<subnum>[0-9]+)\.hostname\.com$;
proxy_pass http://192.168.56.$subnum;
答案3
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;
}
}
请记住:如果是邪恶的!!! ;-)