通过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,即用于响应客户端的某些动作。
- 100用来提示客户端请求继续;
- 101用来表示更换协议,最典型的就是HTTP协议升级到WS协议。
1.2、2xx
RFC定义:Success - The action was successfully received,understood, and accepted,即表示请求成功。
- 200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页;
- 201 (已创建) 请求成功并且服务器创建了新的资源;
- 202 (已接受) 服务器已接受请求,但尚未处理;
- 203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源;
- 204 (无内容) 服务器成功处理了请求,但没有返回任何内容;
- 205 (重置内容) 服务器成功处理了请求,但没有返回任何内容;
- 206 (部分内容) 服务器成功处理了部分 GET 请求。
1.3、3xx
RFC定义:Redirection - Further action must be taken in order to complete the request,即用于重定向的。
- 300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择;
- 301 (永久重定向) 请求的网页已永久移动。到新位置服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置;
- 302 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求;
- 303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码;
- 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容;
- 305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理;
- 307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
其中301与302是最常用到的。
1.4、4xx
RFC定义:Client Error - The request contains bad syntax or cannot be fulfilled,即表示客户端请求请求包含错误语法或无法履行。
- 400 (错误请求) 服务器不理解请求的语法;
- 401 (未授权) 请求要求身份验证, 对于需要登录的网页,服务器可能返回此响应;
- 403 (禁止) 服务器拒绝请求;
- 404 (未找到) 服务器找不到请求的网页;
- 405 (方法禁用) 禁用请求中指定的方法;
- 406 (不接受) 无法使用请求的内容特性响应请求的网页;
- 407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理;
- 408 (请求超时) 服务器等候请求时发生超时;
- 409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息;
- 410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应;
- 411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求;
- 412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件;
- 413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力;
- 414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理;
- 415 (不支持的媒体类型) 请求的格式不受请求页面的支持;
- 416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码;
- 417 (未满足期望值) 服务器未满足"期望"请求标头字段的要求。
其中较为常见的是400、401、402、403、404、405。
1.5、5xx
RFC定义:Server Error - The server failed to fulfill an apparently valid request,即表示服务端无法完成客户端请求。
- 500 (服务器内部错误) 服务器遇到错误,无法完成请求;
- 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码;
- 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应;
- 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态;
- 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求;
- 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请求错误
相关文章:
通过Nginx重新认识HTTP错误码
文章目录 概要一、HTTP错误码1.1、1xx1.2、2xx1.3、3xx1.4、4xx1.5、5xx 二、Nginx对常见错误处理三、参考资料 概要 在web开发过程中,通过HTTP错误码快速定位问题是一个非常重要的技能,同时Nginx是非常常用的一个实现HTTP协议的服务,因此本…...
某房产网站登录RSA加密分析
文章目录 1. 写在前面2. 抓包分析3. 扣加密代码4. 还原加密 1. 写在前面 今天是国庆节,首先祝福看到这篇文章的每一个人节日快乐!假期会老的这些天一直在忙事情跟日常带娃,抽不出一点时间来写东西。夜深了、娃也睡了。最近湖南开始降温了&…...
深度学习:基于长短时记忆网络LSTM实现情感分析
目录 1 LSTM网络介绍 1.1 LSTM概述 1.2 LSTM网络结构 1.3 LSTM门机制 1.4 双向LSTM 2 Pytorch LSTM输入输出 2.1 LSTM参数 2.2 LSTM输入 2.3 LSTM输出 2.4 隐藏层状态初始化 3 基于LSTM实现情感分析 3.1 情感分析介绍 3.2 数据集介绍 3.3 基于pytorch的代码实现 3…...
selenium使用已经获取的cookies登录网站报错unable to set cookie的处理方式
用selenium半手动登录github获取其登录cookies后,保存到一个文件gtb_cookies.txt中。 然后用selenium使用这个cookies文件,免登录上github。但是报错如下:selenium.common.exceptions.UnableToSetCookieException: Message: unable to set co…...
初阶数据结构(四)带头双向链表
💓博主csdn个人主页:小小unicorn ⏩专栏分类:数据结构 🚚代码仓库:小小unicorn的代码仓库🚚 🌹🌹🌹关注我带你学习编程知识 带头双向链表 链表的相关介绍初始化链表销毁链…...
2022年9月及10月
9月 1.Halcon12的HObject和Hobject halcon12 可以用HObject,也可以用Hobject,用法都一样 包括HalconCpp.h 如果附加目录中: C:\Program Files\MVTec\HALCON-12.0\include\halconcpp\ 在前面,则用 HalconCpp::HObject 如果附加目录…...
Vmware安装
title: “Vmware安装” createTime: 2021-11-22T09:53:2908:00 updateTime: 2021-11-22T09:53:2908:00 draft: false author: “name” tags: [“VMware”,“安装”,“linux”] categories: [“install”] description: “测试的” linux安装VMware Workstation16 1.安装包 …...
RSA算法
算法简介 RSA是一种非对称加密方式。发送者把明文通过公钥加密后发送出去,接受者把密文通过私钥解密得到明文。 算法过程 生成公钥和私钥 选取两个质数p和q,np*q。n的长度就是密钥长度。φ(n)(p-1)*(q-1)φ(n)为n的欧拉函数。找到1-φ(n)间与φ(n)互质的…...
计算机竞赛 深度学习手势识别 - yolo python opencv cnn 机器视觉
文章目录 0 前言1 课题背景2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存 5 模型训练5.1 修…...
Spring的Ordered
Ordered Java中的Ordered接口是Spring框架中的一个接口,用于表示对象的顺序。它定义了一个方法getOrder(),用于获取对象的顺序值,值越小的对象越先被处理。 Ordered接口是Spring框架中的一个接口,用于定义组件的加载顺序。当一个…...
前端两年半,CSDN创作一周年
文章目录 一、机缘巧合1.1、起因1.2、万事开头难1.3、 何以坚持? 二、收获三、日常四、憧憬 五、总结 一、机缘巧合 1.1、起因 最开始接触CSDN,还是因为同专业的同学,将计算机实验课的实验题,记录总结并发在了专业群里。后来正式…...
定时任务管理平台青龙 QingLong
一、关于 QingLong 1.1 QingLong 介绍 青龙面板是支持 Python3、JavaScript、Shell、Typescript 多语言的定时任务管理平台,支持在线管理脚本和日志等。其功能丰富,能够满足大部分需求场景,值得一试。 主要功能 支持多种脚本语言…...
java多线程相关介绍
1. 线程的创建和启动 在 Java 中创建线程有两种方式。一种是继承 Thread 类并重写其中的 run() 方法,另一种是实现 Runnable 接口并重写其中的 run() 方法。创建完线程对象后,调用 start() 方法可以启动线程。 2. 线程的状态 Java 的线程在不同阶段会处于…...
css复合选择器
交集选择器 紧紧挨着 <template><div><p class"btn">Click me</p><button class"btn" ref"myButton" click"handleClick">Click me</button></div> </template> <style> but…...
USART串口协议
通信接口 •通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 • 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 全双工:指通信双方能够同时进行双向通信,一般来说,全双…...
picoctf_2018_shellcode
picoctf_2018_shellcode Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX disabled PIE: No PIE (0x8048000) RWX: Has RWX segments32位,啥都没开 这个看着挺大的,直接来个ROPchain,…...
Apache Derby的使用
Apache Derby是关系型数据库,可以嵌入式方式运行,也可以独立运行,当使用嵌入式方式运行时常用于单元测试,本篇我们就使用单元测试来探索Apache Derby的使用 一、使用IDEA创建Maven项目 打开IDEA创建Maven项目,这里我…...
leetcode 图相关的题
图 图相关知识有leetcode207课程表1(有环判断)以及210 课程表2(拓扑排序). 链表遍历 def dfs(n):print(n)dfs(n)二叉树遍历 def dfs(n):print(n)dfs(n.left)dfs(n.right)多叉树遍历 dfs(root) def dfs(n):for node in n.nodes:dfs(node)图遍历 visited [False] * n_node…...
程序员们,我们能工作到65岁吗?
软件开发人员的职业生涯可以持续多久?这是大多数认真考虑成为专业程序员的人不禁想知道的事情。 在谈论这样一个要求很高的职业时,这是一个非常自然的问题。没有人愿意花费数年时间学习一项技能,这些技能将在几年内不再相关,或者当…...
【洛谷 P1996】约瑟夫问题 题解(队列+模拟+循环)
约瑟夫问题 题目描述 n n n 个人围成一圈,从第一个人开始报数,数到 m m m 的人出列,再由下一个人重新从 1 1 1 开始报数,数到 m m m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
