调试显示nginx try_files忽略实际存在的文件

whlutmcx  于 2022-11-28  发布在  Nginx
关注(0)|答案(1)|浏览(171)

我试图构建一个位置块,它提供/tmp目录中的文件,但只提供那些不以.txt扩展名结尾的文件。
现在我有这个:

location ~^\/temporary(?!.*\.txt$)(.*)$ {
                        root /tmp;
                        try_files $1 =404;
                }

问题是我只得到404,即使我请求的文件存在。我使用了一点调试来确保这一点,下面是“/temporary/test.html”URI的调试转储:

022/07/17 19:53:42 [debug] 6408#0: *1 http script capture: "/test.html"                                                                                                     
2022/07/17 19:53:42 [debug] 6408#0: *1 trying to use file: "/test.html" "/tmp/test.html"                                                                                     
2022/07/17 19:53:42 [debug] 6408#0: *1 trying to use file: "=404" "/tmp=404"                                                                                                 
2022/07/17 19:53:42 [debug] 6408#0: *1 http finalize request: 404, "/temporary/test.html?" a:1, c:1                                                                          
2022/07/17 19:53:42 [debug] 6408#0: *1 http special response: 404, "/temporary/test.html?"                                                                                   
2022/07/17 19:53:42 [debug] 6408#0: *1 http set discard body
2022/07/17 19:53:42 [debug] 6408#0: *1 HTTP/1.1 404 Not Found

正如您所看到的,服务器实际上尝试读取/tmp/test.html文件,因此路径构建已经成功。
此外,该文件也存在并且可读,如以下命令所示:

sudo -u nobody stat /tmp/test.html
  File: /tmp/test.html
  Size: 15              Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 2097220     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    nobody)   Gid: ( 1000/    user)
Access: 2022-07-17 19:26:19.701542983 +0300
Modify: 2022-07-17 19:53:17.923305174 +0300
Change: 2022-07-17 19:53:17.923305174 +0300
 Birth: 2022-07-17 19:26:19.701542983 +0300

我错过了什么?

k3fezbri

k3fezbri1#

好的,很明显/tmp目录是问题的根源。当我尝试另一个目录时,由于某种原因,一切都按预期运行。

相关问题