加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

502错误,让你进一步大白Nginx和PHP-FPM之间的相关

发布时间:2018-09-21 20:40:19 所属栏目:业界 来源:虞大胆的叽叽喳喳
导读:【新品产上线啦】51CTO播客,随时随地,碎片化进修 本日我就回首下其时碰着的一个502题目,以及最后的办理要领,各人也别鄙视这个502错误,充实领略很是须要,但愿通过这篇文章各人可以或许学到一些常识。 在我这个案例中,Nginx通过FastCGI协议毗连PHP-FPM(7.1
【新品产上线啦】51CTO播客,随时随地,碎片化进修

本日我就回首下其时碰着的一个502题目,以及最后的办理要领,各人也别鄙视这个502错误,充实领略很是须要,但愿通过这篇文章各人可以或许学到一些常识。

在我这个案例中,Nginx通过FastCGI协议毗连PHP-FPM(7.1),Nginx和PHP-FPM陈设在统一台呆板上,设置完成后,在赏识器中会见,报了一个 502 错误。

起首引用下百科对付 502 的先容:

  • The server was acting as a gateway or proxy and received an invalid response from the upstream server.

它的意思就是Nginx没有获取到PHP-FPM的相应。

我其时处理赏罚的较量着急,花了好久的时刻,此处忽略各类的排查进程,先贴下最后正确的设置(和本次题目有关的)。

502错误,让你进一步大白Nginx和PHP-FPM之间的相关

(1)nginx.conf:

  1. error_log logs/error.log; 
  2. user www-data www-data; 

(2)php-fpm.conf:

  1. access.log = /var/log/fpm.log 

(3)pool.d/www.conf(PHP-FPM pool 设置文件):

  1. user = www-data 
  2. group = www-data 
  3.  
  4. listen = /run/php/php7.1-fpm.sock 
  5.  
  6. listen.owner = www-data(错误发生时的设置:listen.owner = www) 
  7. listen.group = www-data(错误发生时的设置:listen.owner = www) 
  8. listen.mode = 0660 
  9. access.log = /var/log/fpm-www.access.log 

再表明下 pool 设置文件,一样平常环境下,nginx 一个假造主机对应一个 php-fpm pool 文件,这样差异的 php-fpm 事变历程就断绝了,互不影响。

接下去先容办理进程:

1:在呈现 502 题目的时辰,调查 nginx 的 error.log 文件,会有以下报错:

  1. 2018/09/18 18:34:32 [crit] 2831#0: *493 connect() to unix:/run/php/php7.1-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 18.179.21.152, server: www.simplehttps.com, request: "GET /1.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.1-fpm.sock:", host: "www.simplehttps.com" 

着实说的已经很大白了,毗连 PHP-FPM 的时辰碰着了权限题目。

2:调查下 php 主历程的 error.log

发明 /var/log/fpm.log 文件没有任何的输出,查阅了官方资料,对付 error_log 这个指令表明的很是少。

我揣摩有两种浸染:

  • 每个 pool 的错误会重定向到这个文件中。(颠末测试,pool错误和这个文件没有相关)
  • PHP-FPM 主历程的一些节制错误。(从本案例来说,主历程并不知道Nginx碰着了错误,以是也没有错误输出)

最后,php-fpm.conf 下的 error_log 指令在我看来没有任何的现适用处,假如读者有知道的,接待指导。

(3)定位题目

知道了nginx通过当地socket方法毗连php-fpm碰着权限题目,定位到了listen.owner和 listen.group指令。

发生题目的缘故起因就是nginx历程的属主和php-fpm属主权限纷歧样,在产生502题目的时辰,nginx属主是www-data,而listen.owner是www。把它们修改同等后,题目办理。

我们不禁要问,listen.owner和listen.group指令暗示什么?看官方的先容:

  1. ; Set permissions for unix socket, if one is used. In Linux, read/write 
  2. ; permissions must be set in order to allow connections from a web server. Man 

它们暗示php-fpm事变历程以unix socket和web处事器毗连的时辰,该socket的权限必需和web处事器的操纵(读取)权限同等。

读者或许大白了什么意思,那user和group这两个指令什么意思,为什么和listen.owner指令云云相像,官方是这么先容的:

  1. ; Unix user/group of processes 

表明的不是很清晰,现实上表白的是这个php-fpm历程自己权限(通过 ps aux | grep php-fpm就能进一步确认),假如php-fpm要转达错误数据给nginx,那么user和group的指令必需和nginx的user指令设置一样(往后会写文章声名)。

这也间接声名白,假如nginx的user指令和php-fpm事变历程的listen.user指令设置纷歧样,也不影响两者交互。只是在本机中,nginx和php-fpm假如要读取或操纵统一文件,必要设置同等,关于这一点但愿各人细心领会。

现实上最简朴的办理方案,就是通过tcp的方法毗连nginx和php-fpm(即www.conf 设置listen = 127.0.0.1:9000),这样不会有权限操纵的题目,但对付本机来说,socket毗连对比tcp毗连,速率上更有担保。

【编辑保举】

  1. 浅谈Nginx处事器的内部焦点架构计划
  2. 从一份设置清单详解 Nginx 处事器设置
  3. 你真的相识怎样将 Nginx 设置为Web处事器吗
  4. Netcraft 8 月 Web 处事器排名:Nginx 极具潜力
  5. 行使Nginx处理赏罚DDOS举办体系优化
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读