对于我的 NGINX 服务器,我设置了一个虚拟服务器,仅用于提供静态内容。目前,我正尝试设置它,以便图像具有到期日期。但是,当我为此创建位置指令时,一切都只会导致 404。
我现在的配置如下:
/srv/www/static.conf
server {
listen 80;
server_name static.*.*;
location / {
root /srv/www/static;
deny all;
}
location /images {
expires 1y;
log_not_found off;
root /srv/www/static/images;
}
}
注意,此文件包含在 /etc/nginx/nginx.conf 中的 http 指令内。
我尝试访问位于 的图像,比如说... static.example.com/images/screenshots/something.png
。果然,该图像也位于/srv/www/static/images/screenshots/something.png
。但是,访问上述地址不起作用,只会告诉我404 未找到。
但是,如果我删除location /images
并更改location /
为以下内容......
location / {
root /srv/www/static;
}
成功了!我哪里做错了?
答案1
您的配置遵循 nginx 配置陷阱在配置 nginx 之前您应该阅读它。
回答你的问题,你不应该root
在位置中定义,定义一次,位置标签将自动让你分配对特定目录的访问权限。
另外,不要为图像目录定义自定义根目录,而是使用try_files
。$uri
将使用映射/images/
目录/static/images/
。
尝试以下配置:
server {
listen 80;
server_name static.*.*;
root /srv/www;
location /static/ {
deny all;
}
location /images/ {
expires 1y;
log_not_found off;
autoindex off;
try_files $uri static/images$uri;
}
}