zoukankan      html  css  js  c++  java
  • 杂谈---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命令

    1、以专家为榜样,不必自己重新探索
    2、解构技能,找出实现80%效果的那20%
    3、不要一心二用
    4、练习练习再练习!然后获得即时反馈
    5、坚持,不要在低谷期放弃
  • 相关阅读:
    linux内核模块的程序结构
    Vmware中RedHat命令行和图形界面切换
    Linux2.6内核启动流程学习
    关于mini2440u_boot的制作及烧录
    linux指令
    Arm-linux-gcc-4.3.2安装步骤
    JNDI 与 LDAP
    apicloud 自定义模块引用aar
    CSS canvas 捕捉视频video元素截图
    本地服务器搭建服务:ftp
  • 原文地址:https://www.cnblogs.com/zhongyuan/p/3313106.html
Copyright © 2011-2022 走看看