通过Nginx重新认识HTTP错误码

文章目录

    • 概要
    • 一、HTTP错误码
        • 1.1、1xx
        • 1.2、2xx
        • 1.3、3xx
        • 1.4、4xx
        • 1.5、5xx
    • 二、Nginx对常见错误处理
    • 三、参考资料

概要

在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请求错误

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/92241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字时代古文的传承———云南文化瑰宝“爨文化“(我为家乡发声)

文章目录 前言⭐ "爨"意味着什么,究竟何为"爨文化"?⭐ 爨文化鲜明的特点1.经济生活2.政治生活3.文化艺术 ⭐ 数字时代古文的传承与传播1.藏品数字化2.建立数据库3.传播大众化 前言 爨文化是继古滇文化之后崛起于珠江正源南盘江流域…

jieba.posseg是jieba中的一个组件,它用于对文本进行词性标注

jieba.posseg是Python中的一个分词工具,它可以将文本切割成词语,并且为每个词语标注词性。这个工具可以帮助我们更好地理解和处理自然语言文本。而pseg则是jieba.posseg的别名,用于方便快捷地进行调用。 下面是一个简单的例子,展…

jvm内存分配与回收策略

自动内存管理 解决两个问题 自动给对象分配内存 对象一般堆上分配(而实际上也有可能经过即时编译后被拆散为标量类型并间接地在栈上分配) 新生对象通常会分配在新生代,少数情况下(例如对象大小超过一定阈值)也可能…

Windows下使用VS2010编译出带pdb可调试的FFmpeg库

本人主要在windows环境下开发,Linux下的gpb调试工具又不如vs调试方便(使用过其他调试工具才知道,vs果真为宇宙最强调试工具),所以决定在windows编译可以调试FFmpeg,以方便调试和学习FFmpeg内部代码。 有过在visual studio下编程的小伙伴应该都知道vs的调试信息主要依靠于…

原型、原型链、判断数据类型

目录 作用 原型链 引用类型:__proto__(隐式原型)属性,属性值是对象函数:prototype(原型)属性,属性值是对象 Function:本身也是函数 相关方法 person.prototype.isPrototypeOf(stu) Object.getPrototypeOf(objec…

JavaScript中如何确定this的值?如何指定this的值?

🎀JavaScript中的this 在绝大多数情况下,函数的调用方法决定了this的值(运行时绑定)。this不能在执行期间被赋值,并且在每次函数呗调用时this的值也可能会不同。 🍿如何确定this的值: 在非严格…

cesium 雷达扫描 (波纹线性雷达扫描效果)

cesium 雷达扫描 (波纹线性雷达扫描效果) 1、实现方法 使用ellipse方法加载圆型,修改ellipse中material方法来实现效果 2、示例代码 2.1 <!DOCTYPE html> <html lang="en"><head>&l

番外6:下载+安装+配置Linux

#########配置Linux---后续 step08: 点击编辑虚拟机设置&#xff0c;选择下载好的映像文件.iso进行挂载&#xff1b; step09: 点击编辑虚拟机选项&#xff0c;选择UEFI启动模式并点击确定&#xff1b; step10: 点击开启虚拟机&#xff0c;选择Install rhel &#xff1b; 备注&…

USART串口协议

通信接口 •通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统 • 通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发 全双工&#xff1a;指通信双方能够同时进行双向通信&#xff0c;一般来说&#xff0c;全双…

美消费增长弱于预期,11月不加息概率升破八成

29号&#xff0c;就在美政府即将停摆关门之际&#xff0c;经济分析局按时公布了8月份美国个人消费支出&#xff08;PCE&#xff09;价格指数以及核心消费支出&#xff08;Core PCE&#xff09;价格指数。 其中&#xff0c;2023年8月美国个人消费支出价格指数环比上涨0.4%&#…

imgui开发笔记<1>、ubuntu环境下快速应用

去这个链接下载imgui源码&#xff08;在此之前需要安装opengl glfw3等等&#xff09;&#xff1a; sudo apt-get install libglfw3-dev https://github.com/ocornut/imgui 我这里源码下载到/home/temp/imgui目录下&#xff0c;咱们不需要编译源码成库&#xff0c;而是直接将下…

初阶数据结构(四)带头双向链表

&#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;数据结构 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f339;&#x1f339;&#x1f339;关注我带你学习编程知识 带头双向链表 链表的相关介绍初始化链表销毁链…

leetcode456 132 Pattern

给定数组&#xff0c;找到 i < j < k i < j < k i<j<k&#xff0c;使得 n u m s [ i ] < n u m s [ k ] < n u m s [ j ] nums[i] < nums[k] < nums[j] nums[i]<nums[k]<nums[j] 最开始肯定想着三重循环&#xff0c;时间复杂度 O ( n 3 )…

【Linux系统编程】僵尸进程与孤儿进程

文章目录 1. 僵尸进程2. 僵尸进程的危害3. 孤儿进程 1. 僵尸进程 上一篇文章进程的状态中最后我们提出了僵尸状态&#xff1a; 为了方便子进程退出后父进程或操作系统获取该进程的退出结果&#xff0c;Linux进程退出时&#xff0c;进程一般不会立即死亡&#xff0c;而是要维持…

C 语言关键字_at_的使用

查看一些老旧代码的时候看到有这么一段。 这个函数是轮询执行的&#xff0c;但是sourceinsight却没有找到vs_ucLedSegDutyRam的定义&#xff0c;全局搜索才找得到&#xff0c;结果发现原来它的定义很奇特。 里面用了_at_这个东西 _at_是让定义的vs_ucLedSegDutyRam首地址定义在…

$nextTick解决echarts宽度固定为100%的问题

问题描述:vue+element项目中使用到了tab切换选项卡,其中有一个tab下的内容是echarts,出现了echarts宽度缩减为100px无法继承100%属性。 问题: echarts渲染时tab选项卡display为none,所以width:100%没有可继承项,被echarts自带方法切割成100px。 我他喵的解决这个问题还是…

54、数组--模拟

LCR 146. 螺旋遍历二维数组 给定一个二维数组 array&#xff0c;请返回「螺旋遍历」该数组的结果。 螺旋遍历&#xff1a;从左上角开始&#xff0c;按照 向右、向下、向左、向上 的顺序 依次 提取元素&#xff0c;然后再进入内部一层重复相同的步骤&#xff0c;直到提取完所有…

进程的状态与转换以及组织方式

1.进程的状态 三种基本状态&#xff1a;运行态&#xff0c;就绪态&#xff0c;阻塞态。 1.运行状态 如果一个进程此时在CPU上运行&#xff0c;那么这个进程处于“运行态”。 CPU会执行该进程对应的程序&#xff08;执行指令序列) 2.就绪状态 当进程创建完成后&#xff0c;…

Python基础知识点入门

初学Python时&#xff0c;以下是一些基础知识点和示例&#xff0c;以帮助你建立坚实的编程基础。 1. 变量和数据类型 Python中的变量用于存储数据。以下是一些常见的数据类型和示例&#xff1a; 整数&#xff08;int&#xff09; age 25 浮点数&#xff08;float&#xff0…

[React] 性能优化相关 (一)

文章目录 1.React.memo2.useMemo3.useCallback4.useTransition5.useDeferredValue 1.React.memo 当父组件被重新渲染的时候&#xff0c;也会触发子组件的重新渲染&#xff0c;这样就多出了无意义的性能开销。如果子组件的状态没有发生变化&#xff0c;则子组件是不需要被重新渲…