I have this config that works as expected in an empty server { }
definition
location ^~ /foo/ {
al
Location blocks in Nginx are exclusive. If you use location ^~
then other rules probably expiry headers for static objects will not apply unless you copy those rules as nested under the same location block.
If you could share your full config then I can make it work for you. Most likely you need to use nested location blocks.