如何在 nginx 中有条件地映射两个相同的变量?

如何在 nginx 中有条件地映射两个相同的变量?

我想$sub有条件地设置依赖于$request_uri和的变量$host

map $request_uri $sub {
    default       front;
    ~^/api/.*     api;
    ~^/rest/.*    rest;
}

map $host $sub {
    hostnames;

    #default    $sub; # Tried, no success

    ping.*     ping;
    admin.*    admin;
}

server {
    listen 80;
    server_name _;

    root /usr/share/nginx/html;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_param HTTP_X_SUB $sub;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }

    location / {
        try_files $uri $uri/ /index.php;;
    }
}

我以为如果主机名不在列表中,nginx 将不会覆盖$sub,但不幸的是它只是将其清空。map $host $sub$sub

因此基本上应该像$host“ping”或“admin”一样进行$sub相应设置。如果主机名不匹配,则检查$request_uri

知道如何存档该声明吗?

编辑:扩展了配置。

相关内容