我正在尝试让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
指令。但是请注意,alias
和try_files
在同一location
块can cause problems中。
在这种情况下:
try_files @dotnet /dev/null dog.txt =404;
try_files
语句没有任何意义。命名的位置只能出现在最后一个位置。因此,最后一个参数可以是命名位置或=404
,不能同时是两者。
[不需要location /
块将请求发送到location @dotnet
。只需删除location /
块并将location @dotnet
块重命名为location /
。