加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

使用nginx try_files的奇怪行为.我的配置有什么问题?

发布时间:2020-12-13 21:41:10 所属栏目:Nginx 来源:网络整理
导读:os:debian stable(挤压) nginx:squeeze-backports 1.2.1-2~bpo60 1 try_files对我来说很奇怪. 这可以按预期工作,如果没有找到$uri就会被尝试 >使用@static位置 try_files $uri $uri/ @static; 只是在最后添加一个= 404导致404.如果我访问位于$uri或@static

os:debian stable(挤压)
nginx:squeeze-backports 1.2.1-2~bpo60 1

try_files对我来说很奇怪.

这可以按预期工作,如果没有找到$uri就会被尝试 – >>使用@static位置

try_files  $uri $uri/ @static;

只是在最后添加一个= 404导致404.如果我访问位于$uri或@static的现有文件,它是否仍然可以工作,如果在@static位置找不到任何内容,则仅提供404?

try_files  $uri $uri/ @static =404;

在@static之前放置= 404使其再次起作用.为什么?
如果文件不在$uri或$uri /位置但在@static上它应该导致404因为= 404是@static(为了我的理解).如果我访问位于$uri的文件,它是从nginx正确提供的(不是命中@static后端或= 404)

try_files  $uri $uri/ =404 @static ;

我很困惑

编辑:我的目标是:测试文件是否在本地,然后检查所有上游服务器的文件,如果在这些位置找不到,则返回404

配置:

upstream domain.com_upstream
{
    server yyy.yyy.yyy.yyy:8000 weight=10 max_fails=3 fail_timeout=3s;
    server zzz.zzz.zzz.zzz:8020 weight=10 max_fails=3 fail_timeout=3s;
}

server 
{
    server_name         www.domain.com;

    listen              xxx.xxx.xxx.xxx:80;

    location @static
    {
        proxy_ignore_client_abort off;
        proxy_intercept_errors    on;
        proxy_next_upstream       http_404 error timeout invalid_header;

        proxy_pass                  http://domain.com_upstream;
        proxy_redirect              off;
        proxy_set_header            Host                $host;
        proxy_set_header            X-Real-IP           $remote_addr;
        proxy_set_header            X-Forwarded-For     $proxy_add_x_forwarded_for;
        client_max_body_size        10m;
        client_body_buffer_size     128k;

        proxy_connect_timeout       10;
        proxy_send_timeout          120;
        proxy_read_timeout          120;

        proxy_buffers 8 16k;
        proxy_buffer_size 32k;
    }

    location ~ ^/test 
    { 
        root /var/www/test;
        try_files $uri @static =404; # exchange with upper try_file examples...
    }

    *** snip ***
}
最佳答案
你误解了try_files参数.引自docs:

If none of the files were found,an internal redirect to the uri specified by the last parameter is made.

只有最后一个参数是后备URI(或命名位置或代码),所有其他参数都是要测试的文件.即

try_files /file1 /file2 /file3 ... @fallback;

将检查文件根目录下的文件(/ file1,/ file2,/ file3等),如果没有找到,nginx将执行内部重定向到@fallback.

try_files … @static = 404;没有意义,因为它将测试文档根目录下名为@static的文件,并且很可能不是你想要的. try_files … = 404 @static;没有意义,因为它将测试名为= 404的文件.

请参阅此处了解文档:http://nginx.org/r/try_files.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读