通过Nginx重新认识HTTP错误码

这篇具有很好参考价值的文章主要介绍了通过Nginx重新认识HTTP错误码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概要

在web开发过程中,通过HTTP错误码快速定位问题是一个非常重要的技能,同时Nginx是非常常用的一个实现HTTP协议的服务,因此本文结合二者谈谈Nginx对HTTP错误码的处理。

一、HTTP错误码

在RFC2616对HTTP协议做了定义,其对错误码定义分为5大类,依次分为100-199、200-299、300-399、400-499、500-599。

1.1、1xx

RFC定义: Informational - Request received, continuing process,即用于响应客户端的某些动作。

  1. 100用来提示客户端请求继续;
  2. 101用来表示更换协议,最典型的就是HTTP协议升级到WS协议。
1.2、2xx

RFC定义:Success - The action was successfully received,understood, and accepted,即表示请求成功。

  1. 200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页;
  2. 201 (已创建) 请求成功并且服务器创建了新的资源;
  3. 202 (已接受) 服务器已接受请求,但尚未处理;
  4. 203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源;
  5. 204 (无内容) 服务器成功处理了请求,但没有返回任何内容;
  6. 205 (重置内容) 服务器成功处理了请求,但没有返回任何内容;
  7. 206 (部分内容) 服务器成功处理了部分 GET 请求。
1.3、3xx

RFC定义:Redirection - Further action must be taken in order to complete the request,即用于重定向的。

  1. 300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择;
  2. 301 (永久重定向) 请求的网页已永久移动。到新位置服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置;
  3. 302 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求;
  4. 303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码;
  5. 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容;
  6. 305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理;
  7. 307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

其中301与302是最常用到的。

1.4、4xx

RFC定义:Client Error - The request contains bad syntax or cannot be fulfilled,即表示客户端请求请求包含错误语法或无法履行。

  1. 400 (错误请求) 服务器不理解请求的语法;
  2. 401 (未授权) 请求要求身份验证, 对于需要登录的网页,服务器可能返回此响应;
  3. 403 (禁止) 服务器拒绝请求;
  4. 404 (未找到) 服务器找不到请求的网页;
  5. 405 (方法禁用) 禁用请求中指定的方法;
  6. 406 (不接受) 无法使用请求的内容特性响应请求的网页;
  7. 407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理;
  8. 408 (请求超时) 服务器等候请求时发生超时;
  9. 409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息;
  10. 410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应;
  11. 411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求;
  12. 412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件;
  13. 413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力;
  14. 414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理;
  15. 415 (不支持的媒体类型) 请求的格式不受请求页面的支持;
  16. 416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码;
  17. 417 (未满足期望值) 服务器未满足"期望"请求标头字段的要求。

其中较为常见的是400、401、402、403、404、405。

1.5、5xx

RFC定义:Server Error - The server failed to fulfill an apparently valid request,即表示服务端无法完成客户端请求。

  1. 500 (服务器内部错误) 服务器遇到错误,无法完成请求;
  2. 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码;
  3. 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应;
  4. 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态
  5. 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求;
  6. 505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

常见的有500、502、503、504。

二、Nginx对常见错误处理

  • 403:一般由文件或目录没有读写权限造成的

2023/10/01 21:29:30 [error] 13030#0: *143214 open() “/home/PHP/project/disdir/kk.html” failed (13: Permission denied), client: 200.200.110.29, server: www.8089.cn, request: “GET /disdir/kk.html HTTP/1.1”, host: “200.200.110.39:8089”

  • 404:文件或目录不存在造成的

2023/10/01 21:23:14 [error] 24291#0: *143205 open() “/home/PHP/project/jj.html” failed (2: No such file or directory), client: 200.200.110.29, server: www.8083.cn, request: “GET /jj.html HTTP/1.1”, host: “200.200.110.39:8089”

  • 405:请求方法不支持,如伪造非HTTP支持的方法(即非GET、POST、PUT等方法),这种Nginx并不会打印错误到error log

  • 500:服务器内部错误,一般见于Nginx代理的上游服务出现错误,但并未断开TCP连接。比如在Nginx+PHP的情况下,PHP运行出现致命错误,就会出现500错误

2023/10/01 21:42:06 [error] 13030#0: *143244 FastCGI sent in stderr: “PHP message: PHP Fatal error: Class ‘Product’ not found in /home/PHP/project/index.php on line 5” while reading response header from upstream, client: 200.200.170.29, server: www.8089.cn, request: “GET /index.php HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9000”, host: “200.200.110.39:8089”

  • 502:Bad Gateway,Nginx代理的上游服务未启动(TCP无法建立连接)或突然挂了(TCP 突然连接断开),在负载均衡中无可用上游服务也会报502
    1)TCP无法建立连接

2023/09/20 13:52:57 [error] 6068#0: *539 connect() failed (111: Connection refused) while connecting to upstream, client: 200.200.110.39, server: www.8084.cn, request: “GET
/test/jj HTTP/1.1”, upstream: “http://200.200.110.39:9503/test/jj”, host: “200.200.110.39:8089”, referrer: “http://200.200.169.89”

2)TCP 突然连接断开

2023/09/21 10:44:55 [error] 32565#0: *34202 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 200.200.110.29, server: www.8089.cn, request: “GET /index.php?opr=hh HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9000”, host: “200.200.110.39:8089”, referrer: “http://200.200.169.89”

3)无可用上游服务

2023/09/20 13:52:59 [error] 6067#0: *544 no live upstreams while connecting to upstream, client: 200.200.110.29, server: www.8089.cn, request: “GET /test/jj HTTP/1.1”, upstream: “http://test_upstreams/test/jj”, host: “200.200.110.39:8089”, referrer: “http://200.200.169.89”

  • 503:Service Unavailable,服务不可用,一般是临时的。比如命中Nginx限流,默认就是503错误码,显然限流状态是临时的,等流量高峰过去就自动恢复了。还有Nginx与上游TCP连接超过可打开文件数也会触发503错误。

2023/09/25 10:12:37 [error] 31111#0: *143112 limiting requests, excess: 0.980 by zone “one”, client: 200.200.110.29, server: www.8089.cn, request: “GET /index.php HTTP/1.1”, host: “200.200.110.39:8089”

  • 504:Gateway Time-out,网冠超时,即上游服务响应超时,取决于反向代理配置的proxy_connect_timeout、proxy_read_timeout、proxy_send_timeout参数。

2023/09/21 11:18:59 [error] 1375#0: *142421 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 200.200.110.29, server: www.8089.cn, request: “GET /index.php?opr=hh HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9000”, host: “200.200.110.39:8089”, referrer: “http://200.200.169.89”

当然了,其他错误还有很多,慢慢积累,欢迎大家评论区补充

三、参考资料

1]:RFC文档
2]:HTTP请求错误文章来源地址https://www.toymoban.com/news/detail-728947.html

到了这里,关于通过Nginx重新认识HTTP错误码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nginx脚本,Nginx变量截取字符串,拼接字符串,nginx打印日志,添加修改HTTP请求头,添加修改HTTP响应头

    nginx变量命名,以$开头。 打印日志的目的,是想知道某个变量的值是多少,通过add_header设置响应头,间接地打印日志。 通过设置响应头,然后在浏览器上请求nginx地址,然后得到的响应头,就知道变量值是多少了。 这个需要注意一下,特别是正则 ~   ,后面截取字符串需要

    2024年02月12日
    浏览(56)
  • 【Nginx05】Nginx学习:HTTP核心模块(二)Server

    第一个重要的子模块就是这个 Server 相关的模块。Server 代表服务的意思,其实就是这个 Nginx 的 HTTP 服务端所能提供的服务。或者更直白点说,就是虚拟主机的配置。通过 Server ,我们可以在同一台服务器上,配置监听不同端口号的 HTTP 应用,配置不同域名解析的 HTTP 服务,并

    2024年02月12日
    浏览(37)
  • 【Nginx11】Nginx学习:HTTP核心模块(八)文件处理

    继续我们的 HTTP 核心模块之旅。今天主要是文件相关的一些处理操作,包括 DirectIO、文件缓存以及 sendfile 相关的配置。这三个配置中,大家应该会见过 sendfile ,但是另外两个就比较少见了。包括我之前也从来没见过,不过还好,DirectIO 并不是一个完全的陌生人,文件缓存优

    2024年02月15日
    浏览(28)
  • 【Nginx04】Nginx学习:HTTP核心模块(一)简单搭建

    前面就说过了,HTTP 模块是整个 Nginx 中最核心的模块。在这其中,它又有一部分最核心的模块,其实也就是在编译安装的时候,我们不装任何扩展就自带的模块。这一部分模块就像是基本的 PHP 语法一样,是最基础的,也是我们最需要重点掌握的内容。 今天先入个门,搭起简

    2024年02月12日
    浏览(43)
  • 【Nginx06】Nginx学习:HTTP核心模块(三)Location

    Location 是整个 HTTP 模块中非常重要的一个子模块,它是为某个请求URI(路径)建立配置。这个模块又是属于 Server 模块的子模块,同时它还可以嵌套在另一个 Location 模块下面,因此,它的作用范围是 server 和 location 。其实,说白了,也就是我们可以为指定的一些路径去做一些

    2024年02月15日
    浏览(32)
  • nginx http模块

    location的定义包含以下几种 =:表示精确匹配,只有请求的url路径与后面的字符串完全相等时,才会命中,不支持location嵌套 ~:表示使用正则定义的,区分大小写 ~*:表示是使用正则定义的,不区分大小写 ^~:表示该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查

    2023年04月08日
    浏览(26)
  • 【Nginx15】Nginx学习:HTTP核心模块(十二)内嵌变量

    关于内嵌变量,其实就是 Nginx 开放给我们的在配置文件中可以使用的变量。源码中无非就是替换成真实的代码变量进行操作。这些变量可以帮助我们做很多事情。之前的文章中其实也有不少地方用到了,比如说  $uri  这个变量,是不是已经见过很多次了。而且这些变量基本

    2024年02月14日
    浏览(31)
  • 【Nginx09】Nginx学习:HTTP核心模块(六)请求头处理

    对于一个 HTTP 应用来说,最重要的其实就是 HTTP 的两个核心功能,一个是请求,一个就是响应。而对于一个 Web 应用服务器来说,响应通常是静态文件或者是动态程序代码来完成,围绕响应的配置指令大部分以缓存优化为主。从这里也能看出,在 Nginx 这种应用服务中,请求相

    2024年02月17日
    浏览(40)
  • nginx http 跳转到https

    改 Nginx 配置文件 在您安装了 SSL 证书之后,您需要修改 Nginx 的配置文件以启用 HTTPS 和 HTTP 自动跳转 HTTPS。 打开 Nginx 配置文件(通常位于 /etc/nginx/nginx.conf ),找到您的网站配置块。在该配置块中添加以下内容: 该配置块包括两个部分: 第一个部分监听 HTTP(端口 80),并

    2024年02月06日
    浏览(44)
  • 关于nginx HTTP安全响应问题

    目录 一、背景 二、http基本安全配置 2.1 host头攻击漏洞 2.2 http method 请求方式攻击漏洞 2.3 点劫持漏洞(X-Frame-Options)  2.4 X-Download-Options响应头缺失 2.5 Content-Security-Policy响应头缺失 2.6 Strict-Transport-Security响应头缺失 2.7 X-Permitted-Cross-Domain-Policies响应头缺失 2.8 Referrer-Policy响应头

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包