NGINX子域名代理通过

NGINX子域名代理通过

版本: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;

http://nginx.org/en/docs/http/server_names.html

答案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;
    }

}

请记住:如果是邪恶的!!! ;-)

相关内容