Nginx 位置问题

Nginx 位置问题

我正在尝试为 /misc-stuff/ 目录中的(仅限图像)设置更长(30 天)的“过期”标头。

这是我在我的网站上使用的内容:

# Serve static files directly from nginx
location ~* \.(jpg|jpeg|gif|png|bmp|ico|pdf|flv|swf|exe|html|htm|txt|css|js) {
   add_header        Cache-Control public;
   add_header        Cache-Control must-revalidate;
   expires           7d;
}

我希望能够保留该代码来处理常规站点图像,但创建一个新的块来处理 /misc-stuff/ 目录。

我努力了 :

location ^~ /misc-stuff/ {
...
}

我现在遇到的问题是,如果有人尝试访问该目录中的备份 .php 文件,它将显示为纯文本。

我该如何设置才能让 /misc-stuff/ 目录中的 .gif 图像受到影响?

答案1

^~您选择文字字符串匹配前缀是否有充分的理由?^~不支持正则表达式,因此您现在所拥有的无法轻易修复。但是,如果您盲目地从其他地方复制了此块而没有理解它,那么您很幸运;更改为~*不区分大小写的正则表达式匹配前缀,并编写一个符合您需求的正则表达式:

location ~* ^/misc-stuff/.*\.(jpg|jpeg|gif|png)$ {
...
}

当然,.php该目录中的文件可能仍与另一location条指令匹配;如果您希望它们可执行,请务必编写一条location指令,将这些文件发送到您选择的 PHP 解释器。(或者,如果您出于某种原因希望将它们保留在该目录中,但不执行它们或让其他人读取它们,请更改它们的权限以禁止服务器读取它们。)

虽然标准nginx 文档中有关该location指令的内容有点缺乏,我发现nginx 维基百科相当好。

相关内容