最近从虚拟主机搬到了一台VPS上,好处自不必多说,关键是价格竟然出奇地便宜。原来我的虚拟空间月租要7美元在加上独立IP费用,月租10多美元了。但是这个VPS竟然每月只要 3 美元!有需要地朋友可以看一下——Ramnode VPS。
搬到VPS之后,装了Centos,用网上找的LNMP一键安装包配置了Nginx+php+mysql环境。据说效率要比LAMP强多了,其实这些我都不懂,只不过vps的内存只有512,所以就选了资源占用比较少的LNMP了。
问题也就来了,本身在wordpress满大街的今天,用Movabletype的人就很少了,更何况是LNMP环境下?
我竟然⋯⋯甚至找不到nginx下配置支持cgi程序的资料。千辛万苦,花了三天的时间,综合好多文章里的介绍,自己勉强搞定了——其实回过头来看,好简单,是我自己菜鸟而已。
开始了:
Nginx不支持CGI但是支持FastCGI,安装FastCGI模块:
wget https://www.cpan.org/modules/by-module/FCGI/FCGI-0.67.tar.gz
tar zxvf FCGI-0.67.tar.gz
cd FCGI-0.67
perl Makefile.PL
make && make install
下载一个或者自己建立一个fastcgi-wrapper.pl。
把上述文件放在比如 /root 某个目录下,把它的权限改为可执行,并执行该文件。执行后会在 /var/run/nginx 目录下生成一个文件:perl_cgi-dispatch.sock 到这里如果一直没出差错就基本上完成了,只需要在Nginx的配置文件里加载cgi格式的文件解释方式:
比如我是这样写的:
location ~* .*\.(cgi|pl)$ {
fastcgi_pass unix:/var/run/nginx/perl_cgi-dispatch.sock;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
其中最后一句,是加载了一个外部的配置文件(如果是用LNMP一键安装包安装的环境,该文件默认是存在的),也可以把这一句用如下内容替换:
lfastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
然后重启nginx,理论上大功已经告成⋯⋯下面继续安装Movabletype的过程。
如果和我一样是新装的系统新配置的环境,要安装Movabletype的话还需要安装DBI.pm来连接mysql数据库,不然会提示:Can’t locate DBI.pm 。
这个就简单了,比如我用的centos,只需一行命令:
yum install perl-DBI perl-DBD-MySQL -y
OK了么?没有,汗一下,MT默认情况下认为 mysql.sock 文件放置的目录和实际用LNMP配置环境时mysql.sock存在的路径不同。这时,在万能的 mt-config.cgi 文件里定义该路径就行了,加入一行:
DBSocket /tmp/mysql.sock //这个路径是lnmp安装包配置的路径,根据自己情况更改。
然后,可以运行一下 mt-check.cgi 你会发现,这时候cgi程序已经可以运行了,但是对于MT来说当前环境仅足以运行而已,很多模块都缺失⋯⋯
好吧,聊胜于无。