是否有可能在 Nginx 中对一组配置完全相同、只是路由不同的块进行 DRY ?例如,location
查看我的 Nginx 中的以下代码片段:.conf
location / {
proxy_pass http://127.0.0.1:3000;
charset UTF-8;
proxy_http_version 1.1;
}
location ~ /android-chrome-192x192.png {
proxy_pass http://127.0.0.1:3000/static/brand/favicons/android-chrome-192x192.png;
expires 365d;
add_header Pragma public;
add_header Cache-Control "public";
}
location = /android-chrome-512x512.png {
proxy_pass http://127.0.0.1:3000/static/brand/favicons/android-chrome-512x512.png;
expires 365d;
add_header Pragma public;
add_header Cache-Control "public";
}
location ~* \.(?:ico|svg|woff|woff2|ttf|otf|css|js|gif|jpe?g|png)$ {
proxy_pass http://127.0.0.1:3000;
expires 365d;
add_header Pragma public;
add_header Cache-Control "public";
}
这里,我至少有两个location
块具有相同的值expires
,add_header Pragma
, 和add_header Cache-Control
。实际上,我有至少 12-15 个这样的块用于各种静态文件。
有什么方法可以减少这里的冗余代码量吗?比如说,用一个块来包含这些值,然后在每个location
块中引用这个块?我甚至尝试使用正则表达式来减少块本身的数量location
,但这会引发以下错误:
“proxy_pass” 不能在正则表达式给出的位置或命名位置内有 URI 部分
有什么解决方法吗?
答案1
尝试这个:
location ^~ /android-chrome- {
proxy_pass http://127.0.0.1:3000/static/brand/favicons/android-chrome-;
expires 365d;
add_header Pragma public;
add_header Cache-Control "public";
}