NGINX try_files 不工作:500 服务器错误

NGINX try_files 不工作:500 服务器错误

我正在尝试使用try_files让我的服务器恢复到不同的文件位置,但我无法让它工作。相反,我得到了 500 服务器错误。以下是文件结构:

选择 > 网站 > 存档

首先,我要检查网页,如果文件不在网页中,则将其存档。例如:如果我想抓取 test.mp4,首先我要查看 /opt/web/,然后查看 /opt/web/archive

配置如下:

http {

  server {
    listen 80;
    root  /opt/web/;

    location / {

      try_files $uri/ /opt/web/archive/;

      add_header 'Access-Control-Allow-Origin' '*';
      add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

      # Custom headers and headers various browsers *should* be OK with but aren't
      add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

      autoindex on;

      set $no_cache "";

      if ($request_uri ~* \.mp4$) {
        set $no_cache "1";
      }

      proxy_no_cache $no_cache;
      proxy_cache_bypass $no_cache;
    }

  }

}

有想法吗?

try_files $uri/ $uri/archive/;

也不起作用

答案1

当用户请求时http://www.example.com/test.mp4$uri变量将包含/test.mp4

现在,当你完成try_files $uri/ /opt/web/archive/;配置后,nginx 将尝试以下文件:

/opt/web/test.mp4/
/opt/web/archive/

因此,您应该使用:

try_files $uri archive$uri;

在您的配置中。

另一个较小的问题是您使用if。而不是这样:

set $no_cache "";

if ($request_uri ~* \.mp4$) {
    set $no_cache "1";
}

proxy_no_cache $no_cache;
proxy_cache_bypass $no_cache;

我建议你使用这个:

location ~ \.mp4$ {
    proxy_no_cache 1;
    proxy_cache_bypass 1;
}

答案2

这里存在两个问题,首先,try_files 不正确,导致重定向无限循环直至出错:

*2 重写或内部重定向循环,同时内部重定向到“/06000513//archive//archive//archive//archive//archive//archive//archive//archive//archive//archive//archive/”,客户端:00.000.000.00,服务器:,请求:“GET /06000513/ HTTP/1.1”,主机:“myhost.com”

决议是try_files $uri /archive$uri =404;使用try_files $uri/ /opt/web/archive/;

第二个问题是缓存,因为我们关闭了缓存,所以在不同位置查找文件时会出现错误。最简单的解决方法就是删除它:

  set $no_cache "";

  if ($request_uri ~* \.mp4$) {
    set $no_cache "1";
  }

  proxy_no_cache $no_cache;
  proxy_cache_bypass $no_cache;

新配置:

http {

  server {
    listen 80;
    root  /opt/web/;

    location / {

      try_files $uri /archive$uri =404;

      add_header 'Access-Control-Allow-Origin' '*';
      add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

      # Custom headers and headers various browsers *should* be OK with but aren't
      add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

      autoindex on;
    }

  }

}

相关内容