嵌套位置中的 Nginx 反向代理

Jos*_*nio 5 nginx cache reverse-proxy static-content

我使用 Nginx 作为多个服务器中多个应用程序的反向代理,并且尝试将通用缓存指令添加到每个应用程序的静态文件中。

我原来的配置是这样的:

location /app1{
    ...
    proxy_pass http://127.0.0.1:8081/app1;
}

location /app2{
    ...
    proxy_pass http://127.0.0.1:8082/app2; 
}

...
Run Code Online (Sandbox Code Playgroud)

要添加静态文件指令,我可以向每个位置添加嵌套位置,如下所示:

location /app1{
    ...
    proxy_pass http://127.0.0.1:8081/app1;
    location ~* \.(css|js|ico|gif|jpg|jpeg|png)$ {
        expires 1d;
        ...
        proxy_pass http://127.0.0.1:8081;
    }
}

location /app2{
    ...
    proxy_pass http://127.0.0.1:8082/app2;
    location ~* \.(css|js|ico|gif|jpg|jpeg|png)$ {
        expires 1d;
        ...
        proxy_pass http://127.0.0.1:8082;
    }
}
Run Code Online (Sandbox Code Playgroud)

由于我有大约 30 个应用程序,因此我尝试将代码简化为如下所示:

location /app1{
    ...
    proxy_pass http://127.0.0.1:8081/app1;
    include static_file_config.conf;
}

location /app2{
    ...
    proxy_pass http://127.0.0.1:8081/app2;
    include static_file_config.conf;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法可以简化代码,这样我就不会以 30 个相同的静态文件位置结束?

请注意,每个应用程序都有自己的静态文件。

Vas*_*kis 4

也许您可以使用正则表达式将特定的 URI 与上游应用程序匹配,而不是使用许多位置:

location ~ /(app)(\d+) {
   proxy_pass http://127.0.0.1:808$2/$1$2;
   include static_file_config.conf;
}
Run Code Online (Sandbox Code Playgroud)

您可以在这里查看它是如何工作的:https://regex101.com/r/sM3eS9/1