Nginx反向代理嵌套位置

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

我原来的configuration是这样的:

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

要添加静态文件指令,我可以添加一个嵌套的位置,像这样的每个位置:

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

由于我有像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; } 

有没有一种方法可以简化代码,所以我不会以静态文件的30个相同的位置结束?

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

也许不是有很多地方,你可以使用正则expression式来匹配一个特定的URI到你的上游应用程序:

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

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

我有一个相关的问题,但我是与Docker容器相关的,并通过执行以下操作来解决它:

 server { listen 80; server_name some_application_name; port_in_redirect off; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://localhost:5555; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /api { rewrite ^/api(.*)$ $1 break; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://localhost:5000; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 

上面有一个在5555上运行的容器和运行在5000上的.NET Core Api,我不想在.NET api中更改路由,所以重写确保路由正确,以使API起作用。