我正在使用 Django 框架和 Nginx 开发一个网站。我想创建一个虚假的系统错误并观察我的系统如何响应。
这是一个不错的文章但是这只会产生错误的 502。我想在上线之前测试其他错误页面(HTTP403、HTTP404、HTTP405 或常见错误页面)。
# Testing for Error 502 - Bad Gateway
location /testing {
fastcgi_pass unix:/does/not/exist;
}
答案1
401 未授权
与 403 Forbidden 类似,但专门用于需要身份验证但身份验证失败或尚未提供身份验证的情况。响应必须包含 WWW-Authenticate 标头字段,其中包含适用于请求资源的质询。
为了实现这一点,您可以添加一个新位置并使用 htaccess 对其进行限制。使用 创建 htaccess 文件htpasswd -c /etc/nginx/htpasswd/htpasswd.domain username
。然后将新位置添加到您的 nginx 配置中,并在该位置中输入以下内容:
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd/htpasswd.domain;
现在,如果您转到您指定的位置并且已实现 auth_basic,则网站将要求输入用户名和密码。如果您输入的数据不正确,它将删除 401 错误代码。
403 禁止
请求有效,但服务器拒绝操作。用户可能没有资源所需的权限,或者需要某种帐户。
只需添加您拥有的新位置并拒绝访问它并告诉 NginX 返回特定的错误代码。
location ~ /(dir1|dir2|dir3) {
deny all;
return 403;
}
404 未找到
请求的资源无法找到,但将来可能会可用。允许客户端进行后续请求。
与上一版本类似:
location ~ /(dir1|dir2|dir3) {
deny all;
return 404;
}
这将拒绝您访问该位置并显示 404。
显然,对于每个修改,最后一步都是重新启动 NginX。
理论上,只要添加所有位置并始终返回不同的位置就足够了错误代码。
答案2
在服务器上放置一个小脚本,让您提供想要检查的错误代码。
PHP 中的一个示例(这应该可以轻松移植到您的服务器上运行的任何脚本语言):
<?php
$errorCode = ( isset( $_GET['code'] ) ) ? intval( $_GET['code'] ) : 200;
header( 'Test error', true, $errorCode );
这使您可以测试任何您想要的错误,而无需进一步的服务器配置:
$ wget -S --spider http://localhost/error.php?code=404
Spider mode enabled. Check if remote file exists.
--2017-11-24 10:23:44-- http://localhost/error.php?code=404
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:80... connected.
HTTP request sent, awaiting response...
HTTP/1.1 404 Not Found
Date: Fri, 24 Nov 2017 09:23:44 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.22
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
Remote file does not exist -- broken link!!!
$ wget -S --spider http://localhost/error.php?code=501
Spider mode enabled. Check if remote file exists.
--2017-11-24 10:23:47-- http://localhost/error.php?code=501
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:80... connected.
HTTP request sent, awaiting response...
HTTP/1.1 501 Not Implemented
Date: Fri, 24 Nov 2017 09:23:47 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.22
Connection: close
Content-Type: text/html
Remote file does not exist -- broken link!!!