我正在尝试location
在 nginx 配置中使用一个简单的指令,但似乎效果并不好;我想确保对本地 css 或 js 文件的所有请求都具有 expires 标头,因此我将以下内容添加到我的服务器块中(如下所示)。我遗漏了什么吗?movies
位置块正常工作(并加载 CSS),但它没有预期的 expires 标头。我尝试将所需的位置块放入movies
位置块中,但没有成功。
server {
server_name www.example.com;
index index.php index.html index.htm;
access_log /var/log/nginx/example.com/access.log;
error_log /var/log/nginx/example.com/error.log;
root /var/example.com;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
# CSS and Javascript -- this is the added location block
location ~* \.(css|js)$ {
expires 1y;
access_log off;
add_header Cache-Control "no-cache, public, must-revalidate, proxy-revalidate";
}
location = /movies {
return 301 $scheme://$host/movies/;
}
location ^~ /movies {
alias /var/example.com/movies/current/public;
fastcgi_index index.php;
try_files $uri $uri/ /movies/movies/index.php$is_args$args;
location ~* \.php {
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include /etc/nginx/fastcgi_params;
}
}
## many other location blocks like the immediate above snipped
# pass the PHP scripts to FastCGI server listening on /run/php/php7.1-fpm.sock
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
答案1
该location ^~ /movies
区块是一个前缀位置,并且^~
运算符使其优先于正则表达式位置。请参阅这个文件了解详情。
这正是您所需要的行为,因为以 开头的 URI/movies
需要设置不同的文档根目录。
要为以或开头/movies
并以 结尾的 URI 定义特殊标头,请使用另一个嵌套位置块。.css
.js
例如:
location ^~ /movies {
...
location ~* \.php {
...
}
location ~* \.(css|js)$ {
...
}
}