Nginx返回200而不提供文件

sr4lhrrt  于 2023-03-17  发布在  Nginx
关注(0)|答案(1)|浏览(322)

我编写了这个/etc/nginx/conf.d/apply.conf并启动了nginx。

server {
  location = /hoge {
    return 200;
  }
}

但是curl命令失败。

curl localhost:80/hoge

上面写着

<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.13.9</center>
</body>
</html>

日志包括

open() "/usr/share/nginx/html/hoge" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /hoge HTTP/1.1", host: "localhost"

我只想返回没有响应体的状态代码,或者响应体为空。
我换了这个,但还是不行。

location /hoge {
return 200 'Wow';
add_header Content-Type text/plain;
}

也试过这个。

location /hoge {
return 200 'Wow';
default_type text/plain;
}
oymdgrw7

oymdgrw71#

没有上下文(整个nginx配置文件的样子)很难说,因为how nginx processes a request
像下面这样的配置文件应该可以很好地满足您的需求:

server {
    listen 80;

    location /hoge {
      return 200;
    }

  }

然而,如果你的配置文件有其他的位置块(特别是如果它们是基于正则表达式的),那么你可能得不到预期的解决方案。

server {
    listen 80;

    location /hoge {
      return 200;
    }

    location ~* /ho {
      return 418;
    }

  }

curl localhost:80/hoge发送请求将返回http状态代码418而不是200。这是因为regex位置在确切位置之前匹配。
所以,长的答案是:如果不了解您正在使用的整个nginx conf文件的上下文,就很难知道答案,但是了解how nginx processes a request将帮助您找到答案。

相关问题