【问题标题】:NGINX add two variable/arguments numbersNGINX 添加两个变量/参数编号
【发布时间】:2021-05-08 16:43:08
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: nginx nginx-reverse-proxy


    【解决方案1】:

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

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

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

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

    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";
        }
    }
    

    【讨论】:

      【解决方案2】:

      不,标准模块不能使用数学。 lua 模块可能有机会,但你可能不应该这样使用 NGINX。这就像用螺丝刀敲钉子一样——你有可能成功,但也有可能你在途中挖出了一只眼睛。

      我建议您重新考虑应用程序的设计,也许有更好/常用的方法来实现您想要的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 2022-12-07
        • 2015-03-16
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        相关资源
        最近更新 更多