NGINX下的站点配置:提供静态文件和.NET文件

Site configuration under NGINX: serve static files and .NET files

我正在尝试让 Nginx 提供静态内容并将其转发到 .NET。对不起,如果这很简单,我是 nginx 的新手。

这是我的站点可用文件:

server {
    listen 80;
    server_name ip_here domain_here;
    root /var/www/html;

    location ^~ /static/ {
        try_files $uri $uri/ cat.txt =404;
    }

    location / {
        try_files @dotnet /dev/null dog.txt =404;
    }

    location @dotnet {
        #...
    }

    ##NOTE: THE FOLLOWING WORKED BEFORE I CHANGED IT TO THE ABOVE
    ##location / {
    ##    try_files $uri $uri/ @dotnet;
    ##}
}

我将注释部分更改为未注释部分,因为 (1) 我需要 example.com/ 指向 @dotnet,但 try_files / 显然有效,并且 (2) 人们指出它更安全地拥有 /static/.

当我尝试访问任何路径时,我得到 404,甚至调试 dog.txt 或 cat.txt.

提前致谢。

您有一个 location ^~ /static/ 块,它处理任何以 /static/ 开头的 URI。 try_files 指令将测试 文件参数 以确定本地文件是否存在于计算出的路径名中。路径名是通过将 root 指令的值与 *file 参数的值连接起来计算的。这些 文件参数 应以前导 /.

开头

在这种情况下:

root /var/www/html;
location ^~ /static/ {
    try_files $uri $uri/ /cat.txt =404;
}

URI /static/foo 将被测试以查看文件是否存在于 /var/www/html/static/foo,然后是 /var/www/html/static/foo 的目录,然后是 /var/www/html/cat.txt 的文件,最后采取返回 404 状态的默认操作。

只有 try_files 指令的最后一个参数可以是状态代码、命名位置或 URI(导致内部重定向)。有关详细信息,请参阅 this document

如果 cat.txt 位于 /var/www/html/static/cat.txt,请使用:

try_files $uri $uri/ /static/cat.txt =404;

请注意,在这两种情况下,都有一个前导 /

如果没有名为 static 的目录,请改用 alias 指令。但请注意 aliastry_files 在同一个 location 块中, can cause problems.


在这种情况下:

try_files @dotnet /dev/null dog.txt =404;

try_files 语句没有意义。命名位置只能出现在最后一个位置。所以最后一个参数可以是命名位置或 =404,不能同时是。

不需要 location / 块将请求发送到 location @dotnet。只需删除 location / 块并将 location @dotnet 块重命名为 location /.