来自Nginx的意外open()文件系统

来自Nginx的意外open()文件系统,nginx,Nginx,你好 我在Nginx配置中发现了一个奇怪的Nginx行为 为了能够处理多个指定位置,我很快意识到我正在填写我的nginx错误日志。 事实上,对于每个与静态文件不匹配的请求,我都会出现文件系统打开错误:[error]11111#0:*20 open()“/www/hello/action”失败(2:没有这样的文件或目录) 使用此nginx配置: server { root /www/hello; location / { try_files /non-existent-4-ev

你好

我在Nginx配置中发现了一个奇怪的Nginx行为

为了能够处理多个指定位置,我很快意识到我正在填写我的nginx错误日志。 事实上,对于每个与静态文件不匹配的请求,我都会出现文件系统打开错误:
[error]11111#0:*20 open()“/www/hello/action”失败(2:没有这样的文件或目录)

使用此nginx配置:

server {

  root /www/hello;

  location / {
    try_files /non-existent-4-ever @all;
  }

  location @all {
    # Expecting Nginx to serve static files and return 404 for non existent files
    error_page 404 = @backend;
  }

  location @backend {
    return 200 "hello";
  }

}
这些文件:

server {

  root /www/hello;

  location / {
    try_files /non-existent-4-ever @all;
  }

  location @all {
    # Expecting Nginx to serve static files and return 404 for non existent files
    error_page 404 = @backend;
  }

  location @backend {
    return 200 "hello";
  }

}
root@somewhere:/www/hello$ls-l
总数8
-rw-r--r--1根根目录6 Sep 23 13:45 file1.txt
-rw-r--r--1根根目录6 Sep 23 13:45 file2.txt
通过:

root@somewhere:/www/hello$curl localhost/file1.txt
content_file1.txt
我可以成功地获取静态文件的内容

通过:

root@somewhere:/www/hello$curl localhost/action
你好
我成功地从我的
@后端
(它总是返回
hello

但我在nginx错误日志中也发现了一个错误:

root@somewhere:/www/hello$ tail -f /var/log/nginx/error.log 
2014/09/23 13:50:13 [error] 111111#0: *19 open() "/www/hello/action" failed (2: No such file or directory), client: 172.17.42.1, server: , request: "GET /action HTTP/1.1", host: "172.17.0.2:80"
你们认为这是Nginx中的一个bug吗?

PS:我通过在第二个命名位置添加对文件的检查来解决错误日志记录问题,如下所示:

  location @all {
    # Expecting Nginx to serve static files and return 404 for non existent files
    error_page 404 = @backend;

    if ( !-f $request_filename ) {
      return 404;
    }
  }    

因此,错误日志在博客和文档中都有解释:try_文件还将log_not_found设置为off


由于您没有显示失败的
@all
中返回的状态,我假设这是一个5xx错误,如果是这种情况,您的修复方法应该是打开递归错误页面,这也在博客中提到过。

Cheers@Melvyn,我想这部分文档没有到达我的眼睛。你回答得很好!