nginx中502/503/504的区别

502 - Bad Gateway

官方解释:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。

  1. 那么什么时候会出现上面的情况呢?
  • php-fpm没有启动,nginx无法将请求交给php-fpm
  • php-fpm运行脚本超时,php-fpm终止了脚本的执行和执行脚本的Worker进程,nginx发现自己与php-fpm的连接断开
  1. nginx和php-fpm 报告502的通信过程
    nginx 在这里充当的是反向代理服务器的角色,是把 http 协议请求转成 fastcgi 协议的请求,通过 fastcgi_pass 指令传递给 php-fpm 进程,当 php-fpm 进程响应的内容是 nginx 无法理解的响应,就会返回 502 bad gateway。

  2. 502的问题如何解决

  • 检查php-fpm是否启动
  • 在 php.ini和 php-fpm.conf中分别有这样两个配置项:max_execution_time和 request_terminate_timeout。
  • 这两项都是用来配置一个 PHP 脚本的最大执行时间的。当超过这个时间时,PHP-FPM不只会终止脚本的执行,还会终止执行脚本的Worker进程。所以Nginx会发现与自己通信的连接断掉了,就会返回给客户端502错误。
  • 只需将这两项的值调大一些就可以让PHP脚本不会因为执行时间长而被终止了。request_terminate_timeout 可以覆盖 max_execution_time,所以如果不想改全局的php.ini,那只改PHP-FPM的配置就可以了。

503 - Service Unavailable

服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。(服务不可用)。一个 http 请求占用一个 php-fpm 进程,瞬时请求量过大时,没有足够的 php-fpm 进程去处理请求,就会返回 503 service unavailable。

或者,nginx 配置了频率限制,而 client 端又超过了配置的限制后就会收到 503 的响应。

504 Gateway Time-out

  1. 504错误的产生情况
  • 504 即 nginx 超过了自己设置的超时时间,不等待 php-fpm 的返回结果,nginx 的 fastcgi 模块有一个 fastcgi_read_timeout 配置,它表示从 FastCGI server 获取数据的超时时间。如果超过这个配置,直接给客户端返回 504 错误。但是此时 php-fpm 依然还在处理请求(在没有超出自己的超时时间的情况下)

  • 网关超时,客户端所发出的请求没有到达网关,在限定时间内没有得到php-fpm,或者完成php-fpm的传输数据的工作而超时 。比方说:即nginx的worker去php-fpm进程池去处理,但是没有fpm进程可以使用了,等啊等,还是没有,返回504。

  1. 解决办法
    *可以将nginx配置中的fastcgi_read_timeout 选项超时时间调大
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。