.net - 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。
提前致谢。
解决方案
您有一个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
指令。但请注意,alias
和try_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 /
.
推荐阅读
- json - 如何在 MongoDB 集合中插入以下 JSON 作为不同的文档
- node.js - 如何使用 NodeJs 实现红帽流程自动化管理器(RHPAM)
- javascript - 哪些数据结构可以用作 Map 键?
- php - Apache 服务器上的反向代理,无需访问配置文件
- python - Python 日期时间字符串 %s(小写 s)有什么作用?
- java - 尝试调用虚拟方法 (EditText)
- amazon-web-services - 带有 ECS 的 AWS 应用程序负载均衡器
- android - 当我切换 Instagram 等活动时,如何保持 android 应用程序的底部固定
- java - Firestore 分页适配器 - 如何知道查询是否返回 0 个结果
- python - 如何按月屏蔽数据框?