nginx 位置正则表达式指令未触发

nginx 位置正则表达式指令未触发

我正在尝试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)$ {
        ...
    }
}

相关内容