位置指令不起作用

位置指令不起作用

对于我的 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;
    }
}

相关内容