NGINX 忽略哈希 css 文件并获取任何存在的 css
NGINX ignore hash css file and fetch any css that exists
我正在使用散列 css 文件 (app-123456.css) 进行缓存破坏。 css 文件请求被代理到带有 nginx 的 cdn。我需要在 cdn 上保持静态命名的文件,因为有要求允许客户修改一些 css 并重新上传文件。如何将散列文件请求传递给 cdn 和 return 静态命名文件?例如,对 app-123456.css 的请求将 return app.css,如果它存在于 cdn 上。我正在尝试使用试用文件,但没有成功。如果 returned 文件是静态命名的,缓存清除在这种情况下是否仍然有效?感谢您的帮助。
location ~* (.+)\.(?:\d+)\.(css)$ {
try_files $uri . @styles;
}
location @styles {
autoindex on;
proxy_pass http://[url].net; # needs to go to http://[url].net/styles/
}
编辑
location ~* (.+)-(?:\d+)\.(css)$ {
try_files $uri . @styles;
}
location @styles {
autoindex on;
rewrite ^(.+)-(?:\d+)\.(css)$ /styles. break;
proxy_pass http://[url].net; # needs to go to http://[url].net/styles/
}
固定
^(.+)\-([a-zA-Z0-9]*)\.(css)$
您需要修改命名 location
中的 URI,然后再使用 proxy_pass
将其向上游传递。这可以使用 rewrite...break
语句来完成。有关详细信息,请参阅 this document。
例如,使用更新后的正则表达式:
location ~* ^(.+)\-(?:[a-zA-Z0-9]*)\.(css)$ {
try_files $uri . @styles;
}
location @styles {
rewrite ^(.+)\-(?:[a-zA-Z0-9]*)\.(css)$ /styles. break;
proxy_pass http://...;
}
上述解决方案基本上将相同的正则表达式应用于 URI 两次,这似乎效率低下且多余。
如果/styles/
URI 前缀对于上游服务器是唯一的,您可以在原始try_files
语句中执行转换。有关详细信息,请参阅 this document。
例如:
location ~* ^(.+)\-(?:[a-zA-Z0-9]*)\.(css)$ {
try_files $uri . /styles.$is_args$args;
}
location ^~ /styles/ {
internal;
proxy_pass http://...;
}
^~
运算符赋予前缀 location
高优先级(有关详细信息,请参阅 this document for details) and the internal
directive prevents the URI from being directly accessible (see this document)。
我正在使用散列 css 文件 (app-123456.css) 进行缓存破坏。 css 文件请求被代理到带有 nginx 的 cdn。我需要在 cdn 上保持静态命名的文件,因为有要求允许客户修改一些 css 并重新上传文件。如何将散列文件请求传递给 cdn 和 return 静态命名文件?例如,对 app-123456.css 的请求将 return app.css,如果它存在于 cdn 上。我正在尝试使用试用文件,但没有成功。如果 returned 文件是静态命名的,缓存清除在这种情况下是否仍然有效?感谢您的帮助。
location ~* (.+)\.(?:\d+)\.(css)$ {
try_files $uri . @styles;
}
location @styles {
autoindex on;
proxy_pass http://[url].net; # needs to go to http://[url].net/styles/
}
编辑
location ~* (.+)-(?:\d+)\.(css)$ {
try_files $uri . @styles;
}
location @styles {
autoindex on;
rewrite ^(.+)-(?:\d+)\.(css)$ /styles. break;
proxy_pass http://[url].net; # needs to go to http://[url].net/styles/
}
固定
^(.+)\-([a-zA-Z0-9]*)\.(css)$
您需要修改命名 location
中的 URI,然后再使用 proxy_pass
将其向上游传递。这可以使用 rewrite...break
语句来完成。有关详细信息,请参阅 this document。
例如,使用更新后的正则表达式:
location ~* ^(.+)\-(?:[a-zA-Z0-9]*)\.(css)$ {
try_files $uri . @styles;
}
location @styles {
rewrite ^(.+)\-(?:[a-zA-Z0-9]*)\.(css)$ /styles. break;
proxy_pass http://...;
}
上述解决方案基本上将相同的正则表达式应用于 URI 两次,这似乎效率低下且多余。
如果/styles/
URI 前缀对于上游服务器是唯一的,您可以在原始try_files
语句中执行转换。有关详细信息,请参阅 this document。
例如:
location ~* ^(.+)\-(?:[a-zA-Z0-9]*)\.(css)$ {
try_files $uri . /styles.$is_args$args;
}
location ^~ /styles/ {
internal;
proxy_pass http://...;
}
^~
运算符赋予前缀 location
高优先级(有关详细信息,请参阅 this document for details) and the internal
directive prevents the URI from being directly accessible (see this document)。