雜談---mac下nginx+php-fpm


---------------這兩天碰到的事。

毫無疑問,這兩天碰到蛋疼的事。

No 1、起因 mac下的apache服務癱瘓,各種調試不起作用,最后一次log還是三天前的,給出error更是奇怪

error_log中的報錯:

[Tue Sep 03 15:13:31 2013] [warn] Init: Session Cache is not configured [hint: SSLSessionCache]
httpd: Could not reliably determine the server's fully qualified domain name, using LiangdeMacBook-Air.local for ServerName
[Tue Sep 03 15:13:31 2013] [notice] Digest: generating secret for digest authentication ...
[Tue Sep 03 15:13:31 2013] [notice] Digest: done
[Tue Sep 03 15:13:31 2013] [notice] Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch mod_ssl/2.2.22 OpenSSL/0.9.8x configured -- resuming normal operations
[Tue Sep 03 18:58:45 2013] [notice] caught SIGTERM, shutting down

 

sites-error_log 中的報錯:

[Tue Sep 03 14:36:10 2013] [error] [client ::1] PHP Warning:  strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /Users/liangzhongyuan/Sites/Classes/PHPExcel/Reader/Excel2007.php on line 407

 

在網上各種查資料,各種方法嘗試,借鑒國內外高手的解答,可就是沒解決掉。蛋疼,胸癢啊~

現在想想,還是不太確定,只能說有可能是,php-fpm沒啟動得了,cgi沒跑起來。請求過來,apache能拿到,卻解析不了。不過一般這種情況應該會報connect() failed錯誤。所以一直蛋疼着。

后來決定,重裝apache,遂,去官網,下最新的。解壓,./configure ---> make --->啪,又報錯,c 編譯器執行不了。哇嘎嘎,火大。

決定重裝gcc,第一種方法,xcode 下載command line tools,速度太慢了。第二種方法,網上http://hi.baidu.com/chaseshu/item/15f8531083d934707b5f258d 沒嘗試,太煩,擔心依賴包不夠(有興趣的可以試試第二種方法)。只能磨磨唧唧等第一種方法了。

裝完gcc,再次編譯apache,真他丫的蛋疼,還是不行。索性算了,換nginx。(期間還裝了macports和howbrew,macports有pkg文件,直接運行安裝。howbrew有中文官網,一句ruby就裝好了。)

mac 安裝 nginx

第一步:安裝macports。(目的為了安裝pcre)

http://www.macports.org/install.php  ,下載對應版本的pkg包,直接運行安裝。

第二步:安裝pcre (目的是滿足nginx需要)

$ port install pcre

第三步:解壓編譯安裝

$ tar xvzf nginx-1.2.0.tar.gz
$ cd nginx-1.2.0
$ sudo ./configure --prefix=/usr/local/nginx --with-http_ssl_module
$ sudo make
$ sudo make install

第四步:啟動nginx 

$ sudo /usr/local/nginx/sbin/nginx

與linux不同,service命令沒有,sudo service nginx restart 無效。

第五步:nginx加入環境變量

cd ~

sudo vim .bash_profile

export PATH="/usr/local/nginx/sbin:$PATH"  //在最前面加上這句話,保持退出后,重啟終端。

現在就可以不用那么長命令了,直接在終端中輸入nginx -h 就可以看到參數表。比如nginx -v 查看版本。sudo nginx -s reload 是重啟nginx。

不過對於重啟我更建議用 sudo  /usr/local/nginx/sbin/nginx -s reload 。 之所以寫這么長命令地址,因為在實際測試中,發現直接用sudo nginx 會報找不到nginx.pid的錯。只有用長命令系統才會自動生成nginx.pid。這點要注意。對於重啟php-fpm也有同樣建議,用sudo /usr/sbin/php-fpm

然后,

nginx跑起來了,沒有問題,很健康的和我打招呼。Welcome nginx。(配置與ubuntu下稍有不同,多個server都寫在nginx.conf里面,最好自己單獨將其抽離出來,我的處理是再建一個vhost-default文件,即sudo vim  vhost-default ,然后把nginx.conf里面那些server配置全部切過來,不過要記得在nginx.conf里加一句,include /usr/local/nginx/conf/vhost-default;)

 

But 配置好環境后,php文件還是運行不了。蛋疼,胸更癢~ 

估計不是nginx的問題了,應該是php或者cgi了。於是寫一個小php文件,在終端直接用:$ php  index.php 運行成功,有輸出。說明php解析也沒有問題。

那唯一的可能就是,nginx或者apache都沒有調到cgi。於是測試php-fpm,終端,$ sudo php-fpm ;啪,果然出錯。php-fpm初始化失敗。

原來一切症結都在這里啊~該死的php-fpm~

本想重裝php-fpm,但php-fpm本是跟這php一起裝來的,如果重裝成本太大。先且看看到底什么問題吧~

一個:目錄/private/etc/下php-fpm.conf配置文件沒找到。於是到那下面,一看有個php-fpm.conf.default,確實沒有.conf的,於是cp一個出來。然后重啟nginx再sudo /usr/sbin/php-fpm,這次又說log目錄不存在,於是又按要求在usr下面mkdir var,cd var,mkdir logs,cd logs,sudo vim php-fpm-error.log。結束。再重啟,再運行php-fpm成功。占用端口127.0.0.1:9000。(有時在/usr/下建目錄var不行,mkdir: var: Operation not permitted那是因為,mac EI Captian系統權限收緊了,不讓創建了)。解決方式:找到/etc/php-fpm.conf,修改error_log = /usr/local/var/log/nginx.log,保存退出即ok了。

 

至此,php-fpm跑成功了,這時跑http://localhost/index.php 空白頁。嘿嘿,我笑了,知道是跑成功了,只是fastcgi_param的問題,於是到vhost-default下,修改成:

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;  //$document_root 就是你的虛擬主機目錄

 

Mac下設置開機啟動nginx和php-fpm:

第一步:

cd /Library/LaunchDaemons

sudo vim com.yourname.nginx.plist //名字隨便起

粘貼:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.yourname.nginx</string>
<key>Program</key>
<string>/usr/local/nginx/sbin/nginx</string>    //應用地址,寫自己的實際情況。
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/usr/local/var</string>
</dict>
</plist>

sudo vim com.yourname.php-fpm.plist 

粘貼:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.yourname.php-fpm</string>
<key>Program</key>
<string>/usr/sbin/php-fpm</string>   //應用地址,寫自己的實際情況。
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/usr/local/var</string>
</dict>
</plist>

有時whereis php-fpm查到的是這個/usr/sbin/php-fpm,但不好使,我用的是/usr/local/sbin/php-fpm這個,不需要root也能運行。

 

第二步:添加到開機啟動任務列表:

launchctl load -w /Library/LaunchDaemons/com.yourname.php-fpm.plist

launchctl load -w /Library/LaunchDaemons/com.yourname.nginx.plist

第三步:重啟電腦,查看端口:

netstat -nat | grep LISTEN

是不是發現9000、80等端口都起來啦~

 

或者用ps命令

ps aux | grep php      //very good

 

至此,蛋疼幾天的問題over~

 

 相關鏈接:

http://www.cnblogs.com/allen8807/archive/2010/11/10/1873843.html  //ps命令


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM