迁移到了 uWSGI
2015年12月21日
虽然 PHP FPM 一直用得还行… 唔,大概已经不能叫做「还行」了,因为它总是莫名其妙地一个请求不响应然后阻塞掉了其他所有的请求。然后就是无止境的 504 Gateway Timeout… 唯一的解决方案是重启 FPM。
然后负载一高就%@T$#$#%@#$%什么的不说了。
无缝切换 PHP FPM 到 uWSGI
安装必要的包
| 1 | apt-get install uwsgi uwsgi-plugin-php supervisor | 
如果是全新安装的话,php 的各种库也要一起装上
| 1 | apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imap php5-mcrypt php5-mhash php5-pspell php5-recode php5-sqlite php5-tidy php5-xmlrpc php5-xsl | 
创建文件 /etc/uwsgi/apps-available/uwsgi-php.ini 并软连接到 /etc/uwsgi/apps-enabled/uwsgi-php.ini
| 1 | ln -s /etc/uwsgi/apps-available/uwsgi-php.ini /etc/uwsgi/apps-enabled/uwsgi-php.ini | 
文件内容
| 1 | [uwsgi] | 
如果要指定 php.ini 的话,env 会失效所以单独用一个循环来读入所有的额外模块配置。env 和 php-ini/for-glob 二选一。不知道有没有更优雅一些的方法呢…
创建 Supervisor 配置文件 /etc/supervisor/conf.d/uwsgi-php.conf
| 1 | [program:uwsgi-php] | 
user 一定是 root,因为需要权限创建 unix socket。之后 uWSGI 会自动降权(参见前面的配置文件)。
然后在 NGINX PHP 的部分修改为
| 1 | location ~ \.php$ { | 
最后重启所有服务并清理——
| 1 | service supervisor restart | 
搞定(๑•̀ㅂ•́)و✧
