首页 > 解决方案 > NGINX 下的站点配置:提供静态文件和 .NET 文件

问题描述

我正在尝试让 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。

提前致谢。

标签: .netnginxconfigurationstatic-files

解决方案


您有一个location ^~ /static/块可以处理以 . 开头的任何 URI /static/。该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(导致内部重定向)。有关详细信息,请参阅此文档

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

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

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

如果没有名为 的目录static,请改用该alias指令。但请注意,aliastry_files在同location一块中,可能会导致问题


在这种情况下:

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

这种try_files说法毫无意义。命名位置只能出现在最后一个位置。所以最后一个参数可以是一个命名的位置或一个=404,而不是两者。

There is no need for a location / block sending the request to a location @dotnet. Just remove the location / block and rename the location @dotnet block to location /.


推荐阅读