乐趣区

NGINX 4xx 5xx 状态码构造

nginx 配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
sendfile on;
keepalive_timeout 65;
server {
listen 8070;
server_name 10.96.79.14;
limit_req zone=one;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location = /abc.html {
root html;
auth_basic “opened site”;
auth_basic_user_file conf/htpasswd;
}
location ~ \.php$ {
root /home/xiaoju/nginx-1.14.0/html;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /home/xiaoju/nginx-1.14.0/html$fastcgi_script_name;
include fastcgi.conf;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}
}
}
index.php

<?php
echo “124”;
4xx 系列
400
NGX_HTTP_BAD_REQUEST
Host 头不合法

curl localhost:8070 -H ‘Host:123/com’

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor=”white”>
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.14.0</center>
</body>
</html>

Content-Length 头重复
curl localhost:8070 -H ‘Content-Length:1’ -H ‘Content-Length:2’

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor=”white”>
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.14.0</center>
</body>
</html>
401
NGX_HTTP_UNAUTHORIZED
参考如上 nginx 配置, 访问 abc.html 需要认证

curl localhost:8070/abc.html

<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor=”white”>
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.14.0</center>
</body>
</html>
403
NGX_HTTP_FORBIDDEN
chmod 222 index.html
将 index.html 设置为不可读

curl localhost:8070

<html>
<head><title>403 Forbidden</title></head>
<body bgcolor=”white”>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.14.0</center>
</body>
</html>
404
NGX_HTTP_NOT_FOUND

curl localhost:8070/cde.html

<html>
<head><title>404 Not Found</title></head>
<body bgcolor=”white”>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.14.0</center>
</body>
</html>
405
NGX_HTTP_NOT_ALLOWED
使用非 GET/POST/HEAD 方法访问一个静态文件
curl -X DELETE localhost:8070/index.html -I

HTTP/1.1 405 Not Allowed
Server: nginx/1.14.0
Date: Tue, 18 Sep 2018 10:02:22 GMT
Content-Type: text/html
Content-Length: 173
Connection: keep-alive
5xx 系列
500
NGX_HTTP_INTERNAL_SERVER_ERROR
修改 index.php 为

<?php
echo “124”

缺少引号, 语法错误

curl localhost:8070/index.php -I

HTTP/1.1 500 Internal Server Error
Server: nginx/1.14.0
Date: Tue, 18 Sep 2018 11:29:19 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Set-Cookie: PHPSESSID=aoesvcuvbh1nh95kdkp152r9e1; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
501
NGX_HTTP_NOT_IMPLEMENTED

nginx 的 transfer-encoding 现在只支持 chunked, 如果客户端随意设置这个值, 会报 501

curl localhost:8070 -H ‘Transfer-Encoding:1’

<html>
<head><title>501 Not Implemented</title></head>
<body bgcolor=”white”>
<center><h1>501 Not Implemented</h1></center>
<hr><center>nginx/1.14.0</center>
</body>
</html>
502
NGX_HTTP_BAD_GATEWAY
修改 nginx 配置为
fastcgi_pass 127.0.0.1:8000;

指向一个未监听的端口
curl localhost:8070/index.php -I

HTTP/1.1 502 Bad Gateway
Server: nginx/1.14.0
Date: Tue, 18 Sep 2018 11:28:17 GMT
Content-Type: text/html
Content-Length: 537
Connection: keep-alive
ETag: “5ad6113c-219”
503
NGX_HTTP_SERVICE_UNAVAILABLE
修改 nginx 配置, 限速为每分钟 10 个请求

limit_req_zone $binary_remote_addr zone=one:10m rate=10r/m;
limit_req zone=one;
连续发送两个请求,第二请求会报 503
curl localhost:8070/index.php -I

HTTP/1.1 503 Service Temporarily Unavailable
Server: nginx/1.14.0
Date: Tue, 18 Sep 2018 11:31:43 GMT
Content-Type: text/html
Content-Length: 537
Connection: keep-alive
ETag: “5ad6113c-219”
504
NGX_HTTP_GATEWAY_TIME_OUT

修改 index.php 为
<?php
echo “124”;
sleep(5);
休息 5 秒钟

修改 nginx 配置为
三秒钟读超时
fastcgi_read_timeout 3;

curl localhost:8070/index.php -I

HTTP/1.1 504 Gateway Time-out
Server: nginx/1.14.0
Date: Tue, 18 Sep 2018 12:17:57 GMT
Content-Type: text/html
Content-Length: 537
Connection: keep-alive
ETag: “5ad6113c-219″
505
NGX_HTTP_VERSION_NOT_SUPPORTED
telnet8070 端口, 输入 GET /index.html HTTP/2.1
不支持 http/2.1, 会报 505

$telnet localhost 8070
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
GET /index.html HTTP/2.1
HTTP/1.1 505 HTTP Version Not Supported
Server: nginx/1.14.0
Date: Tue, 18 Sep 2018 12:26:35 GMT
Content-Type: text/html
Content-Length: 203
Connection: close
<html>
<head><title>505 HTTP Version Not Supported</title></head>
<body bgcolor=”white”>
<center><h1>505 HTTP Version Not Supported</h1></center>
<hr><center>nginx/1.14.0</center>
</body>
</html>

退出移动版