Nginx 版本 1.10.2nginx
PHP 版本 7.0.12網絡
Node 版本 5.9.0php-fpm
本文是想講一個 Nginx 的錯誤,爲啥還要說起 PHP 和 Node 的版本呢?容我先還原一下應用場景代理
首先就是我有一個綁定在 3000 端口的 Node Servercode
我須要從 80 端口直接訪問這個服務,因此我使用了 Nginx 的反向代理rem
而至於 PHP ,其實這個錯誤就是與它有關get
當我使用這個 Node Server 的時候,返回了一個 502 Bad Gateway 錯誤io
查看網絡請求,也沒有什麼錯誤,接着就查看了 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 了