技术支持 贵阳贵阳网站建设,前端开发学哪些,怎么制作网页表格,上传文章网站[ 知识是人生的灯塔#xff0c;只有不断学习#xff0c;才能照亮前行的道路 ]#x1f4e2; 大家好#xff0c;我是 WeiyiGeek#xff0c;一名深耕安全运维开发#xff08;SecOpsDev#xff09;领域的技术从业者#xff0c;致力于探索DevOps与安全的融合#xff08;Dev…[ 知识是人生的灯塔只有不断学习才能照亮前行的道路 ] 大家好我是 WeiyiGeek一名深耕安全运维开发SecOpsDev领域的技术从业者致力于探索DevOps与安全的融合DevSecOps自动化运维工具开发与实践企业网络安全防护欢迎各位道友一起学习交流、一起进步 若此文对你有帮助一定记得点个关注⭐与小红星❤️或加入到作者知识星球『 全栈工程师修炼指南』转发收藏学习不迷路 。HTTP 协议反向代理中与上游服务端建立连接处理描述前面作者带着各位看友一起学习了 Nginx 反向代理以及接收客户端请求的处理相关指令参数本小节将继续讲解在 Nginx 中与上游服务建立连接的一些重要指令参数配置。温馨提示若文章代码块中存在乱码或不能复制请联系作者也可通过文末的阅读原文链接加入知识星球中阅读原文链接https://articles.zsxq.com/id_fkims9wlo8ww.html指令参数1.向上游服务器建立连接以及发送请求的超时时间控制proxy_connect_timeout设置与上游服务建立连接的超时时间缺省值 60s。如果在此时间内无法完成连接则返回 502Bad Gateway错误终止特别注意超时设置通常不能超过75秒。Syntax: proxy_connect_timeout time; Default: proxy_connect_timeout 60s; Context: http, server, locationproxy_send_timeout设置向上游服务发送请求的超时时间缺省值 60s。如果在此时间内无法完成数据传输则连接将关闭并返回 504Gateway Time-out错误终止, 特别注意超时仅在两个连续的写操作之间设置而不是为整个请求的传输设置。Syntax: proxy_send_timeout time; Default: proxy_send_timeout 60s; Context: http, server, location2.当上游服务器建立连接异常时错误处理与故障转移proxy_next_upstream指令用于控制当上游服务出现错误时是否尝试选择另一个上游服务器进行请求转发简单来说就是当上游返回失败时处理办法。缺省值为error以及timeout其中error表示出现错误时重试timeout表示超时时重试off表示不进行故障转移特别注意其生效的前提是 Nginx 尚未向客户端发送任何响应字节一旦已有数据发送该机制将不再触发。Syntax: proxy_next_upstream error | timeout | denied | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...; Default: proxy_next_upstream error timeout; Context: http, server, location # 参数说明 error 当与上游建立连接、发送请求或读取响应过程中发生网络层面错误如 TCP/IP 层错误时触发重选; timeout 与与上游建立连接超时connect timeout、读取超时read timeout等场景下触发重选; denied 服务器拒绝连接1.29.3时; invalid_header 当与上游服务返回的 HTTP header 不合法时触发; http_xxx 服务器返回了指定的HTTP错误代码时; non_idempotent 根据 RFC 7231 规定使用非幂等方法POSTPOSTPATCH的请求不会被传递到下一个服务器启用此选项明确允许重试此类请求时; off 禁止将请求传递到下一个服务器即禁止 proxy_next_upstream 指令功能proxy_next_upstream_timeout指令用于限制将请求传递到下一个服务器的时间若为 0 值则表示不限制时间。proxy_next_upstream_tries指令用于限制将请求传递到下一个服务器的尝试次数若为 0 值则表示不限制重试次数。Syntax: proxy_next_upstream_timeout time; Default: proxy_next_upstream_timeout 0; Context:http, server, location Syntax: proxy_next_upstream_tries number; Default: proxy_next_upstream_tries 0; Context: http, server, locationproxy_intercept_errors指令用于是否拦截来自上游的错误响应状态码 ≥ 300并使用error_page指令进行处理缺省值 off 表示将上游服务原样返回给客户端设置为 on 则会将错误响应替换为 Nginx 中通过 error_page 指令指定的错误响应码对应的页面。Syntax: proxy_intercept_errors on | off; Default: proxy_intercept_errors off; Context: http, server, location温馨提示在 Nginx 中对于上游服务器连接异常处理重选机制是非常必要的通常需要根据实际业务在分布式部署场景进行合理配置以达到最佳的性能与稳定性。3.为上游服务器连接时启用 keepalive 机制分为TCP keepalive机制 与HTTP keepalive机制两部分。3.1TCP keepalive机制proxy_socket_keepalive用于控制是否在连接上游服务器中启用TCP keepalive。默认情况下操作系统的设置对套接字有效缺省值 off 表示不启用若设置为 on则为套接字打开 SO_KEEPALIVE 套接字选项有助于保持长连接状态减少因网络抖动导致的频繁重连问题。TCP 层的 keepalive 用于检测长时间空闲连接是否仍有效由操作系统层面控制的其探测原理是在设定的空闲时间后发送探测包若对端正常则响应探测应答若主机或进程已不存在则无响应或RST响应从而识别并关闭失效连接节省资源。Syntax: proxy_socket_keepalive on | off; Default: proxy_socket_keepalive off; Context: http, server, location This directive appeared in version 1.15.6.3.2HTTP keepalive机制实际上在讲解upstream指令负载均衡服务组时已经提及此处再复习回顾一下。keepalive connections指令用于设置每个 worker 进程维护的空闲 keepalive 连接数上限。keepalive_requests number指令用于设置单个 keepalive 连接最多可以处理的请求数超过此值后将关闭该连接。keepalive_timeout times指令用于设置 HTTP keepalive 超时时间即在上游服务器空闲状态下保持连接打开的最长时间。默认情况下 Nginx 不启用此功能除非在upstream中明确设置了keepalive参数。4.为上游服务器请求连接指定本地出口 IP 地址proxy_bind指令用于指定的本地IP地址发起到代理服务器的传出连接这对于需要从特定网络接口或具有多个IP的机器上进行出站连接的场景非常有用显式指定使用哪一个IP作为源地址发起连接此外还可用于实现 IP 透传。Syntax: proxy_bind address [transparent] | off; Default: — Context: http, server, location # 参数说明 transparent1.11.0允许从非本地IP地址例如从客户端的真实的IP地址发起到被代理服务器的输出连接 proxy_bind $remote_addr transparent;proxy_bind_dynamic指令是 Nginx 商业版本支持动态绑定即在运行时根据上游服务器地址自动选择本地IP启用后在每次连接尝试时进行绑定操作,Syntax: proxy_bind_dynamic on | off; Default: proxy_bind_dynamic off; Context: http, server, location This directive appeared in version 1.29.3.温馨提示虽然可用通过 proxy_bind 指令指定本地IP出口地址连接上游服务器其本质是修改outgoing TCP连接IP头中的source IP address, 此时上游服务器的请求来源即为指定的IP地址所以在实践中务必保证上游返回的数据包能正确的路由返回 Nginx 服务器否则连接无法继续。weiyigeek.top-TCP数据包结构图5.当客户端断开后的与上游服务器的连接控制proxy_ignore_client_abort指令用于当客户端在不等待响应的情况下关闭连接时是否应关闭与代理服务器的连接。默认情况下off如果客户端在读取响应之前关闭了连接Nginx 会立即终止与上游服务器的连接并返回给客户端一个错误特别注意: 若启用可能增加上游服务器负担需谨慎使用。Syntax: proxy_ignore_client_abort on | off; Default: proxy_ignore_client_abort off; Context: http, server, location示例演示示例1.在 Nginx 实现反向代理时当连接上游异常自动切换节点以及自定义上游服务错误响应码页面。步骤 01.在 213 主机openresty/1.27.1.1搭建一个简单的上游服务分别创建 8010 和 8011 监听端口用于演示上游正常返回 200 响应码以及模拟异常响应码 500# 10.20.172.213 主机 vim /usr/local/openresty/nginx/conf/nginx.conf http { ... server { listen 8010; server_name localhost _; default_type text/plain; # 返回 200 响应码 return 200 Response 200, this is upstream server on port $server_addr:$server_port\n; } server { listen 8011; server_name localhost _; default_type text/plain; # 返回 500 错误响应码 return 500 Response 500, this is upstream server on port $server_addr:$server_port\n; } ... } # 配置修改完成后重载 openresty nginx -s reload步骤 02.在 214 主机 Nginx 配置目录中创建backend_server.conf文件定义 upstream 服务组。tee /usr/local/nginx/conf.d/backend_server.conf EOF # 创建上游服务器 upstream backend_server { # 定义共享内存区用于在工作进程间同步负载信息可根据后端服务器数量调整。 zone backend_zone 64k; # 多个上游服务组缺省使用轮询负载均衡算法 server 10.20.172.213:8010; server 10.20.172.213:8011; # 设置与上游服务器的长连接最多保持10个空闲的保活连接。 keepalive 10; keepalive_timeout 60s; # 设置与上游服务器的长连接空闲连接的超时时间。 } EOF步骤 03.在 214 主机的 Nginx 配置目录中创建proxy_server.conf文件用于配置反向代理连接到上一个步骤中的上游服务组backend_server。# 创建用于显示 500 错误的自定义页 echoerror_page HTTP 500 Internal Server Error /usr/local/nginx/html/error_500.txt # 创建监听用于反向代理 tee /usr/local/nginx/conf.d/proxy_server.conf EOF server { listen 80; server_name test.weiyigeek.top; access_log /var/log/nginx/test.log main; error_log test.error.log debug; # 反向代理配置将请求转发到上游服务器组 location / { proxy_pass http://backend_server; # 设置请求头部 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 启用长连接 proxy_set_header Connection ; proxy_http_version 1.1; # 关键点关闭连接异常自动切换节点缺省是 error timeout 时自动切换到下一个节点。 proxy_next_upstream off; } # 反向代理配置用以验证连接异常自动切换节点。 location /error { proxy_pass http://backend_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 关键点将连接超时设置为1秒用以模拟连接异常。 proxy_connect_timeout 1s; # 关键点设置当上游服务连接超时异常响应头以及返回500错误时自动切换到下一个节点。 proxy_next_upstream error timeout invalid_header http_500; } # 反向代理配置用以验证上游服务响应 500 错误码的自定义页面。 location /intercept { proxy_pass http://backend_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 启用拦截上游服务响应错误码 proxy_intercept_errors on; # 关闭连接异常自动切换节点。 proxy_next_upstream off; } # 指定500响应码默认页面 error_page 500 /error_500.txt; location /error_500.txt { root html/; } } EOF步骤 04.配置修改完毕后执行nginx -t命令验证配置是否正确再执行nginx -s reload命令重载 nginx同样使用 curl 命令模拟访问用于测试上游服务在连接异常以及特定的上游响应码的相关指令处理效果。验证1.访问两次/路径第一次正常返回上游服务端口信息第二次正常返回上游服务异常500响应码之后再修改 213 主机中8011端口为8012端口用以模拟上游服务异常。# 第一次访问正常返回上游服务端口信息第二次访问模拟异常返回500错误码。 $ curl -i http://test.weiyigeek.top $ curl -i http://test.weiyigeek.top HTTP/1.1 500 Internal Server Error Server: nginx/1.29.0 Date: Wed, 10 Dec 2025 07:30:00 GMT Content-Type: text/plain Content-Length: 65 Connection: keep-alive Response 500, this is upstream server on port 10.20.172.213:8011 # 在213主机中将8011端口修改为8012后执行用以模拟上游服务异常。 $ curl http://test.weiyigeek.top $ curl http://test.weiyigeek.top html headtitle502 Bad Gateway/title/head body centerh1502 Bad Gateway/h1/center hrcenternginx/1.29.0/center /body /htmlweiyigeek.top-验证1上游服务连接失败时图验证2.访问/error路径用以验证连接异常之后再将 213 主机中 8012 端口改回到 8011 端口以验证上游返回的响应为指定的 500 时http_500自动切换节点到10.20.172.213:8010。# 连接异常自动切换节点不会再显示 502 Bad Gateway 了 [rootweiyigeek_top conf.d]# curl http://test.weiyigeek.top/error Response 200, this is upstream server on port 10.20.172.213:8010 [rootweiyigeek_top conf.d]# curl http://test.weiyigeek.top/error Response 200, this is upstream server on port 10.20.172.213:8010 # 上游返回500错误码时自动切换不会再显示 Response 500, this is upstream server on port 10.20.172.213:8011 [rootweiyigeek_top conf.d]# curl http://test.weiyigeek.top/error Response 200, this is upstream server on port 10.20.172.213:8010 [rootweiyigeek_top conf.d]# curl http://test.weiyigeek.top/error Response 200, this is upstream server on port 10.20.172.213:8010验证3.访问/intercept路径验证拦截上游服务backend_intercept响应错误码用以验证自定义错误页面由图可知等一次请求到上游 10.20.172.213:8010 中返回的 200而第二次请求到上游 10.20.172.213:801 中返回的 500 状态码遂返回自定义500 错误页面。$ curl http://test.weiyigeek.top/intercept -iweiyigeek.top-拦截上游服务错误自定义错误页面图至此当前阶段已完成 Nginx 于上游服务器连接建立、请求发送以及连接异常时处理等相关性能指令介绍并实践了当连接上游异常时自动切换节点和拦截上游响应错误码实现 error_page 自定义错误从而有效处理上游故障和不良响应增强系统的健壮性和透明性下一节将讲解 Nginx 如何接收并处理来自上游的HTTP响应。END加入作者【全栈工程师修炼指南】知识星球『 全栈工程师修炼指南』星球主要涉及全栈工程师Full Stack Development实践文章持续更新包括但不限于企业SecDevOps和网络安全等保合规、安全渗透测试、编程开发、云原生Cloud Native、物联网工业控制IOT、人工智能Ai从业书籍笔记人生职场认识等方面资料或文章。Q: 加入作者【全栈工程师修炼指南】星球后有啥好处✅ 将获得作者最新工作学习实践文章以及网盘资源。✅ 将获得作者珍藏多年的全栈学习笔记(需连续两年及以上老星球友也可单次购买)✅ 将获得作者专门答疑学习交流群解决在工作学习中的问题。✅ 将获得作者远程支持在作者能力范围内且合规。获取作者工作学习全栈笔记作者整理了10年的工作学习笔记涉及网络、安全、运维、开发需要学习实践笔记的看友可添加作者微信或者回复【工作学习实践笔记】当前价格299除了获得从业笔记的同时还可进行问题答疑以及每月远程技术支持希望大家多多支持收获定大于付出知识推荐往期文章【最新】Nginx | 核心知识150讲百万并发下性能优化之HTTP协议中反向代理实践笔记【最新】Nginx | 负载均衡策略一致性哈希算法实践【最新】Nginx | 负载均衡策略最少连接算法实践【最新】Nginx | 负载均衡策略round-robin 加权轮询实践【最新】Nginx | 负载均衡策略ip_hash / hash 会话保持实践【最新】Categraf | 国产化采集器实现SQL Server 数据库指标采集、可视化、异常告警全流程【相关】Nginx | 核心知识150讲百万并发下性能优化之反向代理流程与负载均衡模块介绍笔记若文章对你有帮助请将它转发给更多的看友若有疑问的小伙伴可在评论区留言你想法哟