---------------這兩天碰到的事。
毫無疑問,這兩天碰到蛋疼的事。
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命令
