NGINX 添加两个 variable/arguments 数字

NGINX add two variable/arguments numbers

我正在尝试设置一个 Nginx,我想在其中将两个数字相加。

server {
        server_name "~^pr-(\d*).review-apps.example.com$";
        
        location / {
            set $port 50000+;
            proxy_pass "http://localhost:$port/test";
        }
    } 

但这不起作用。 (结果在字符串中。例如“50000+125”)

如何在 nginx.conf 中添加两个数字?有可能吗?

不,标准模块无法使用数学。 lua 模块可能有机会,但你可能不应该这样做,因为 NGINX 不应该那样使用。就像用螺丝刀敲钉子一样,有成功的可能,也有可能中途戳出一只眼睛。

我建议你重新考虑你的应用程序的设计,也许有一个better/commonly使用的方法来实现你想要的。

如果您使用固定长度的数字,例如只有三位数字,对于这种特殊情况,您可以使用字符串连接而不是添加数字:

server {
    server_name "~^pr-(\d{3}).review-apps.example.com$";
        
    location / {
        set $port 50;
        proxy_pass "http://localhost:$port/test";
    }
}

这将为您提供 pr-125.review-apps.example.com 主机名的 50145

对于端口号数字的可变计数,您可以使用命名正则表达式捕获组:

server {
    server_name  "~^pr-(?<pr1>\d).review-apps.example.com$"
                 "~^pr-(?<pr2>\d{2}).review-apps.example.com$"
                 "~^pr-(?<pr3>\d{3}).review-apps.example.com$";

    location / {
        if ($pr1) { set $port 5000$pr1; }
        if ($pr2) { set $port 500$pr2; }
        if ($pr3) { set $port 50$pr3; }
        proxy_pass "http://localhost:$port/test";
    }
}