以下是nginx的mydomain.conf文件的内容。
server {
server_name www.mywebsite.com;
#the below works
add_header "this" "works";
root /var/www/yii2app/web;
index index.php;
charset utf-8;
access_log off;
error_log off;
location ~* \.(txt|js|json|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar|svg)$ {
try_files $uri =404;
}
location /img {
add_header Cache-Control "public, no-transform";
add_header "hello" "word";
expires max;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/yii2app/web/$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
}
}
当我意识到我的位置块没有被nginx读取或接受时,我正在尝试配置缓存控制。
我通过放置一些额外的标头键值来对此进行了测试,例如:
add_header "this" "works";
和
add_header "hello" "word";
当我使用curl进行测试时,可以看到“ this”“起作用”,而在/ img位置块中却看不到“ hello”“ world” ...
curl -I http://www.mywebsite.com/img/test.gif
我在做什么错?上面的配置是我目前拥有的确切配置,除了网站地址和根路径。我已注释掉其他所有配置行。
答案 0 :(得分:0)
对正则表达式位置块进行顺序评估,并优先于普通前缀位置块。
URI /img/foo.gif
将与location ~* \.(txt|js|json|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar|svg)$
块优先匹配location /img
块,而与顺序无关。
可以使用^~
修饰符为前缀位置赋予更高的优先级。
例如:
location ^~ /img { ... }
有关详细信息,请参见this document。
或者,如果不需要add_header
部分,则可以使用map
with the expires
directive。