Nginx + php-fpm ข้อผิดพลาด“ 504 เกตเวย์หมดเวลา” ข้อผิดพลาดที่มีภาระเกือบเป็นศูนย์ (บนเซิร์ฟเวอร์ทดสอบ)


29

หลังจากดีบั๊กเป็นเวลา 6 ชั่วโมง - ฉันยอมแพ้: |

เรามี nginx + php-fpm + mysql ในระบบ LAN ด้วยเกือบ 100 wordpress (สร้างและใช้โดยนักออกแบบ / นักพัฒนาที่แตกต่างกันทั้งหมดที่ทำงานในการตั้งค่า wordpres ทดสอบ)

เราใช้ nginx โดยไม่มีปัญหาใด ๆ จากความยาว

วันนี้ทุกอย่างฉับพลัน - nginx เริ่มกลับมา "504 Gateway Time-out" จากสีน้ำเงิน ...

ฉันตรวจสอบบันทึกข้อผิดพลาด nginx สำหรับโฮสต์เสมือน ...

2010/09/06 21:24:24 [error] 12909#0: *349 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:11 [error] 12909#0: *349 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:11 [error] 12909#0: *443 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:12 [error] 12909#0: *443 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:08:32 [error] 12909#0: *1025 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:33 [error] 12909#0: *1025 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:40 [error] 12909#0: *1064 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:40 [error] 12909#0: *1064 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:24:44 [error] 12909#0: *1313 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:24:53 [error] 12909#0: *1313 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"

ขณะที่ฉันรัน php-fpm บนพอร์ต 9000 ผ่านโหมด TCP ฉันรัน "netstat | grep 9000" และสังเกตเห็นบางสิ่งผิดปกติ ... (การวางเอาต์พุตบางส่วนที่นี่เพื่อความสะดวกในการอ่าน)

tcp        9      0 localhost:9000          localhost:36094         CLOSE_WAIT  14269/php5-fpm  
tcp        0      0 localhost:46664         localhost:9000          FIN_WAIT2   -               
tcp     1257      0 localhost:9000          localhost:36135         CLOSE_WAIT  -               
tcp     1257      0 localhost:9000          localhost:36125         CLOSE_WAIT  -               
tcp        9      0 localhost:9000          localhost:36102         CLOSE_WAIT  14268/php5-fpm  
tcp        0      0 localhost:46662         localhost:9000          FIN_WAIT2   -               
tcp      745      0 localhost:9000          localhost:46644         CLOSE_WAIT  -               
tcp        0      0 localhost:46658         localhost:9000          FIN_WAIT2   -               
tcp     1265      0 localhost:9000          localhost:46607         CLOSE_WAIT  -               
tcp        0      0 localhost:46672         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1257      0 localhost:9000          localhost:36119         CLOSE_WAIT  -               
tcp     1265      0 localhost:9000          localhost:46613         CLOSE_WAIT  -               
tcp        0      0 localhost:46646         localhost:9000          FIN_WAIT2   -               
tcp     1257      0 localhost:9000          localhost:36137         CLOSE_WAIT  -               
tcp        0      0 localhost:46670         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1265      0 localhost:9000          localhost:46619         CLOSE_WAIT  -               
tcp     1336      0 localhost:9000          localhost:46668         ESTABLISHED -               
tcp        0      0 localhost:46648         localhost:9000          FIN_WAIT2   -               
tcp     1336      0 localhost:9000          localhost:46670         ESTABLISHED -               
tcp        9      0 localhost:9000          localhost:36108         CLOSE_WAIT  14274/php5-fpm  
tcp     1336      0 localhost:9000          localhost:46684         ESTABLISHED -               
tcp        0      0 localhost:46674         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1336      0 localhost:9000          localhost:46666         ESTABLISHED -               
tcp     1257      0 localhost:9000          localhost:46648         CLOSE_WAIT  -               
tcp     1336      0 localhost:9000          localhost:46678         ESTABLISHED -               
tcp        0      0 localhost:46668         localhost:9000          ESTABLISHED 12909/nginx: wo             

มีคู่ "CLOSE_WAIT" & "FIN_WAIT2" มากมายตามที่ไฮไลต์ด้านล่าง (ในเอาต์พุตด้านบน):

tcp     1337      0 localhost:9000          localhost:46680         CLOSE_WAIT  -               
tcp        0      0 localhost:46680         localhost:9000          FIN_WAIT2   -

โปรดทราบพอร์ต 46680 ข้างต้น

ฉันเปิดใช้งานบันทึกข้อผิดพลาดช้า mysql แบบสอบถาม แต่มันไม่ทำงาน

ณ ตอนนี้รีสตาร์ท php5-fpm ทุกนาทีผ่าน cronjob (ดูคำสั่งด้านล่าง) ทำให้ทุกอย่างทำงานได้อย่างราบรื่น "" แต่ฉันเกลียดการเย็บปะติดปะต่อกันและต้องการแก้ปัญหานี้ ...

1 * * * * service php5-fpm restart > /dev/null

ฉันค้นหาอย่างกว้างขวางใน Google - ไม่ได้รับความช่วยเหลือ ดังที่ได้กล่าวมานี้เป็นเซิร์ฟเวอร์ทดสอบใน LAN โหลด CPU ไม่เคยข้าม 0.10 และการใช้หน่วยความจำก็ต่ำกว่า 25% (ระบบมี RAM 2GB และติดตั้งเซิร์ฟเวอร์ Ubuntu) ดังนั้นหากคุณพบว่าเวลาสับสนที่จะช่วยฉันโปรด อย่างน้อยวางคำใบ้

ขอบคุณล่วงหน้าสำหรับความช่วยเหลือ

-Rahul

(หมายเหตุ - นี่คือการผ่านรายการใหม่ของ - http://forum.nginx.org/read.php?11,127694 )

อัปเดต: ฉันพบคำตอบซึ่งโพสต์ด้านล่าง

คำตอบ:


31

ฉันพบคำตอบในการโพสต์บนฟอรัม nginx - http://forum.nginx.org/read.php?2,127854

คำตอบในกรณีของฉันคือการตั้งค่า:

request_terminate_timeout=30s

ในการกำหนดค่า php-fpm (ปกติ/etc/php5/fpm/php-fpm.conf)

หมายเหตุคุณสามารถใช้ค่าอื่นที่ไม่ใช่ 30s

ฉันใช้มันเพื่อให้ตรงกับค่าของฉันในphp.iniไฟล์หลักซึ่งก็คือ:

max_execution_time = 30

ขอบคุณทุกคน :-)


5
การกำหนดค่านี้อาจพบได้ในไฟล์ www.conf ขอบคุณสำหรับคำตอบแม้ว่าดูเหมือนว่าจะได้ทำเคล็ดลับ
eddiemoya

2
นี่คือคำสั่งสระว่ายน้ำระดับคุณจะได้รับข้อความแสดงข้อผิดพลาดเมื่อพยายามที่จะใส่ลงใน PHP-fpm.conf ของ[global]ส่วน มันทำงานได้ที่นั่นก็ต่อเมื่อคุณมีพูลการตั้งค่าในนั้น นอกจากนี้: เอกสาร request_terminate_timeout
tanius

หากนี่เป็นคำตอบที่ถูกต้องที่ฉันต้องการจริงๆวันศุกร์นี้จะดีที่สุดในปี 2558
ฟิลิป

2
ฉันพบว่าการใส่ไฟล์request_terminate_timeout=30sของฉันphp-fpm.confทำให้เกิดข้อผิดพลาด (111 การเชื่อมต่อที่ถูกปฏิเสธ) เมื่อฉันย้ายมันไปยังwww.confไฟล์ของฉันมันใช้งานได้
AJB

บน CentOS 7.2 เมื่อใช้ php7 request_terminate_timeout ตั้งอยู่ใน: /etc/php-fpm.d/www.conf
nadavkav

16

นี่คือวิธีแก้ไขปัญหาของฉัน:

ทำการเปลี่ยนแปลงต่อไปนี้เพื่อ /etc/nginx/nginx.conf ใน http {section

proxy_connect_timeout  600s;
proxy_send_timeout  600s;
proxy_read_timeout  600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;

จากนั้นรีสตาร์ท nginx

/etc/init.d/nginx รีสตาร์ท


2
ใช่ว่ามันดูไม่เหมือนว่าจะมีอะไรเกี่ยวข้องกับปัญหาที่คนถามคำถาม
HopelessN00b

3
แต่โชคดีที่ฉันต้องการ :)
luchaninov

สิ่งนี้ไม่ได้แก้ไขปัญหาของฉัน แต่มันทำให้ฉันเห็นข้อผิดพลาดจริงแทนที่จะเป็นข้อความหมดเวลาซึ่งนำฉันไปสู่ปัญหาจริง
Michael

4

หากคุณใช้ php 5.3 ให้เพิ่มงานในมือ

หากคุณใช้ php 5.2 ให้ทำการ backport ตัวปะแก้เพื่อเพิ่มขนาด backlog จาก 128

นอกจากนี้ให้ใช้ซ็อกเก็ต unix แทนซ็อกเก็ต TCP unix: /tmp/php5-cgi.sock (หรือเส้นทางที่เกี่ยวข้อง)


ฉันต้องยอมรับโดยเฉพาะอย่างยิ่งกับการใช้ซ็อกเก็ตยูนิกซ์
แมตต์

ขอบคุณ karmawhore สำหรับคำตอบ ฉันพบวิธีแก้ปัญหาในรายการส่งเมลของ nginx
rahul286

@ rahul286 ตอบอะไร? ฉันสนใจ!
breiti

@breiti ดูเซิร์ฟเวอร์ของฉันด้านล่าง - serverfault.com/a/179136/17440
rahul286

3

เยี่ยมมากขอบคุณ

request_terminate_timeout = 30s

มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน

แต่ฉันต้องแทรกบรรทัดในไฟล์นี้: "/etc/php5/fpm/pool.d/www.conf" ที่จะพูดใน "Worker Section"

PHP 5.3.21-1 - Wordpress 3.5.1

http://php-fpm.org/wiki/Configuration_File


ฉันมีการรวมกันของปัจจัยที่ทำให้เกิดข้อผิดพลาด 502 สูตรของคุณทำมายากล! ขอบคุณมาก!
Jorge Vicente Mendoza

2

ในกรณีของฉัน (ข้อความแสดงข้อผิดพลาด nginx เดียวกัน) สคริปต์ php ที่มีปัญหาบางตัวไม่ได้จบที่จะเรียกใช้และรอบางสิ่งส่งผลให้ไม่มี php5-fpm children สำหรับ nginx ให้เลือกอีกต่อไป

แก้ไข:

  1. เพิ่มเวลาดำเนินการอื่น ๆ ที่กล่าวถึงโพสต์นี้ request_terminate_timeout=30s
  2. เพิ่มจำนวนเด็ก และทุกอย่างทำงานเหมือนมีเสน่ห์ pm.max_spare_servers=16 pm.min_spare_servers=2

ตอนนี้ทุกอย่างทำงานเหมือนมีเสน่ห์


ฉันมีคำขอการเชื่อมต่อภายนอกที่ใช้งานมานานในสคริปต์ PHP ของฉัน มองหางานที่ต้องทำนาน ๆ
Ali Nadalizadeh

1

ฉันมีปัญหาเดียวกันและฉันแก้ไขได้โดยลบ Apache อย่างสมบูรณ์:

yum remove httpd

หลังจากนั้นฉันขอแนะนำให้คืนค่าทั้ง PHP และ NGINX:

/etc/init.d/nginx restart
/etc/init.d/php-fpm restart

1
เราไม่มี apache บนเซิร์ฟเวอร์ของเราแล้ว ดีใจที่ได้รู้กรณีของคุณเพราะมันอาจช่วยเราได้ในอนาคต
rahul286

0

สำหรับฉันปัญหาเดียวกันได้เกิดขึ้นหลังจากลบ rabbitmq จากเซิร์ฟเวอร์ ไม่มีสิ่งใดในข้างต้นที่ไม่เป็นประโยชน์การติดตั้งโมดูล php5 ใหม่ทั้งหมดแก้ปัญหาได้ ฉันมี Debian 8.2 บนเซิร์ฟเวอร์นั้น หวังว่าจะเป็นประโยชน์สำหรับใครบางคน


-1

สิ่งนี้อาจช่วยคน:

คุณควรดูที่พารามิเตอร์การตั้งค่า fastcgi และ php ... ในกรณีของฉัน (ฉันใช้ apache2 + php5-fpm) และเวลา max_execution ขึ้นอยู่กับระยะเวลาที่โมดูล fastcgi รอการตอบกลับด้วย ( -หมดเวลาที่ไม่ได้ใช้งาน) ...

http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html#FastCgiExternalServer


ทำไมต้องใช้ apache2 ฉันหมายความว่าคุณสามารถใช้ nginx โดยตรงเพื่อโต้ตอบกับ php5-fpm ไม่จำเป็นต้องใช้ Apache เมื่อคุณมี nginx!
rahul286

หากคุณใช้ nginx หากคนอื่นไม่ได้ใช้ nginx หวังว่านี่จะช่วยพวกเขาได้ :-) ... ฉันเจอหน้านี้เพื่อค้นหาคำถามที่เกี่ยวข้องกับ Apache2 + php5-fpm
Farinspace

ตกลง. ฉันคิดว่าคุณกำลังใช้ Nginx กับ Apache สำหรับสคริปต์ PHP อย่างที่บางคนเคยใช้ในอดีต
rahul286
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.