標籤:解決 尋找 文章 沒有 服務 str time 開啟 php
本篇文章由:http://xinpure.com/nginx-error-upstream-prematurely-closed-connection-while-reading-response-header-from-upstream/
環境描述
Nginx 版本 1.10.2
PHP 版本 7.0.12
Node 版本 5.9.0
本文是想講一個 Nginx 的錯誤,為啥還要提及 PHP 和 Node 的版本呢?容我先還原一下應用情境
首先就是我有一個綁定在 3000 連接埠的 Node Server
我需要從 80 連接埠直接存取這個服務,所以我使用了 Nginx 的反向 Proxy
而至於 PHP ,其實這個錯誤就是與它有關
尋找錯誤原因
當我使用這個 Node Server 的時候,返回了一個 502 Bad Gateway 錯誤
查看網路請求,也沒有什麼錯誤,接著就查看了 Nginx error log 裡的錯誤資訊
[error] 17028#0: *111 upstream prematurely closed connection while reading response header from upstream
好吧,並不是什麼明顯的錯誤提示,只好到 Google 查查看了
查了一番似乎也挺多人遇到這個問題的,但是解決問題的方法好像都不一樣。。。
有的說是 keepalive_timeout 值太小了 (這個值我根據服務配置,已經改成 600,感覺不太可能),還有說重啟 Nginx 就行了 (嘗試過。),等等。。。
當然也有讓我眼前一亮的答案,那就是 重啟 php-fpm ,果斷嘗試一下
果然。。。啟動報錯了,提示大概意思是連接埠被佔用了,瞬間感覺好像找對了突破口
解決錯誤
看了一下連接埠才發現,原來是之前已經開啟了另外一個 Node Server 佔用了 php-fpm 預設的 9000 連接埠
簡直是自己坑自己!
因為服務的連接埠不能改,要和其它同事的統一,所以我把 php-fpm 的連接埠改成了 9999
PHP 是使用 brew 安裝的,配置路徑為: /usr/local/etc/php/7.0/php-fpm.d/www.conf
listen = 127.0.0.1:9999
然後重啟 php-fpm 就 OK 了
nginx error: upstream prematurely closed connection while reading response header from upstream