我只有 Nginx 上游的经验,而不是静态文件的服务。
Nginx 有一个默认服务器,它提供欢迎使用 nginx!页面并在虚拟主机上没有匹配项时显示。我想保留此默认页面,但将200状态代码覆盖为404。
我不知道该怎么做。有任何想法吗?
您可以使用返回带有错误代码的页面
error_page 404 /index.html;
Run Code Online (Sandbox Code Playgroud)
只要root在您的服务器块中定义为 nginx 的默认路径。Nginx.org 有关于所有这些的大量文档,值得一看。
是危险的。但是,您可以使用return对服务器中其他任何位置的请求进行响应,这将正确调用 error_page 指令。如果你把它放在你的 server 块的底部,它将作为一个包罗万象的请求没有在其他地方指定:
location / {
return 404;
}
Run Code Online (Sandbox Code Playgroud)
以下是return.
为了真正迂腐,您还可以省略 error_page 指令,而只编写重定向 URL(对于从 0.8.42 版本开始的代码 301、302、303、307 和 308):
location / {
root /path/to/www/nginx;
return 301 /index.html;
}
Run Code Online (Sandbox Code Playgroud)
或者响应正文(对于其他代码):
location / {
root /path/to/www/nginx;
return 404 '404 error';
}
Run Code Online (Sandbox Code Playgroud)
...但如果出现任何问题,这可能很难解决。
Nginx 有一个相当简单的语法来区分状态代码和页面。在一个server块中,您可以定义rootnginx 将在何处查找请求的静态页面。当请求静态页面但未找到,或无法读取,或发生其他情况时,nginx 会获取状态代码并执行操作。如果该代码是 200,它会处理 html、php 或其他任何内容,这些内容可以(并且经常会)触发对文件系统或其他某个套接字的一系列请求,以提供页面的这个或那个部分。成功的结果被发送到浏览客户端,失败时返回错误的默认页面。在这两种情况下,都会返回状态代码(允许浏览器端自定义 404 和其他错误)。
该error_page指令只是告诉 nginx 下一步要遵循什么请求。实际上,这个请求甚至不必是磁盘上的文件。它可以是location具有自己的规则集的命名。nginx 的默认配置很好地说明了这一点:
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}
Run Code Online (Sandbox Code Playgroud)
因此,在获得 503 时,nginx 将请求 /50x.html,并且对 50x.html 的任何请求的位置语句定义了查找此文件的根路径。
| 归档时间: |
|
| 查看次数: |
18916 次 |
| 最近记录: |