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

时间:2020-05-17 00:29:36

标签: .net nginx configuration static-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 ,甚至没有debug dog.txt或cat.txt。

谢谢。

1 个答案:

答案 0 :(得分:1)

您有一个location ^~ /static/块,该块处理任何以/static/开头的URI。 try_files指令将测试文件参数,以确定在计算出的路径名下是否存在本地文件。路径名是通过将root伪指令的值与* file参数的值连接起来来计算的。这些 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在同一locationcan cause problems中。


在这种情况下:

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

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

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

相关问题