我这个博客用的是Debian的VPS,先前的Web环境用的是XAMPP,即Web Server是Apache,数据库是Sqlite,这两个都是XAMPP中包含的,而博客源码是typecho。
前些天抽空换成了nginx、fastcgi和Debian中的Sqlite,以下是迁移过程。 参考了http://blog.chinaitlab.com/html/30/104830-166235.html,特此声明。 一、备份typecho 我的typecho安装在/opt/lampp/typecho,备份这个目录即可。 二、删除xampp 呵呵,话说XAMPP真方便,解压就能用,我放在了/opt/lampp中,所以直接删除即可。 注:事先备份! 三、安装nginx 执行以下命令:
sudo apt-get update sudo apt-get install nginx 配置文件默认安装位置:
conf: /etc/nginx/nginx.conf
bin:/usr/sbin/nginx
vhost: /etc/nginx/sites-enable/default
cgi-params: /etc/nginx/fastcgi-params
例:建立一个虚拟主机,写在/etc/nginx/sites-enable/中的一个文件即可
server {
listen 80;
server\_name www.23day.com;
access\_log /var/log/nginx/home.ucenter.access.log;
location / {
root /var/www/23day.com;
index index.php;
location ~ .php$ {
fastcgi\_pass 127.0.0.1:9000;
fastcgi\_index index.php;
fastcgi\_param SCRIPT\_FILENAME
/var/www/23day.com$fastcgi\_script\_name;
include /etc/nginx/fastcgi\_params;
}
}
四、安装php-cgi模块
执行sudo apt-get install php5-cgi 配置文件默认安装位置:
php-cgi: /usr/bin/php-cgi
php5-cgi: /usr/bin/php5-cgi
cgi config: /etc/php5/cgi/php.ini
修改php.ini文件的cgi.fix\_pathinfo数据为1,默认为0
cgi.fix\_pathinfo=1;
这样php-cgi方能正常使用SCRIPT\_FILENAME这个变量
五、安装spawn-fcgi
- spawn-fcgi是lighttpd的一个用来控制php-cgi的工具,现在已从lighttpd中独立出来成为一个开源项目。
安装有两种办法:
1、Apt,现在spawn-fcgi已经进入testing源,等进入stable应该也快了。如果用的是testing源,现在就可以sudo apt-get install spawn-fcgi
2、编译安装,去官网下载源码编译。可以直接用我已经编译好的文件,下载链接在http://210.56.192.43/xyj/Downloads/spawn-fcgi
以下是官网链接 http://redmine.lighttpd.net/projects/spawn-fcgi/news
如果系统没有安装GCC编译环境,刚需要在安装lighttpd之前要安装build-essential工具包,执行以下命令
sudo apt-get install build-essential然后编译即可。 这样cgi控制器就安装完成. 四、重新配置权限 将typecho目录cp到/var/www/nginx-default,然后执行:
chown -R www-data.www-data /var/www/nginx-default4.启动测试系统.启动fast_cgi:
spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-cgi参数含义如下-f <fcgiapp> 指定调用FastCGI的进程的执行程序位置,根据系统上所装的PHP的情况具体设置 -a <addr> 绑定到地址addr -p <port> 绑定到端口port -s <path> 绑定到unix socket的路径path -C <childs> 指定产生的FastCGI的进程数,默认为5(仅用于PHP) -P <path> 指定产生的进程的PID文件路径 -u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,Ubuntu下可以使用www-data,其他的根据情况配置,如nobody、apache等 注意:ip,端口与nginx服务器中的cgi-pass要对应. -C表示打开几个cgi进程 启动nginx sudo /etc/init.d/nginx start 好了,如果没有出错信息,则说明配置成功了,现在写个phpinfo测试下吧!
最后,附上我的/etc/nginx/sites-enable/default的配置文件,此配置文件启用了rewrite功能
server {
listen 80;
server\_name localhost;
access\_log /var/log/nginx/localhost.access.log;
location / {
root /var/www/nginx-default;
index index.php;
if (-f $request\_filename/index.html){
rewrite (.\*) $1/index.html break;
}
if (-f $request\_filename/index.php){
rewrite (.\*) $1/index.php;
}
if (!-f $request\_filename){
rewrite (.\*) /index.php;
}
}
#error\_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error\_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ .php$ {
#proxy\_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on
127.0.0.1:9000
#
location ~ .php$ {
fastcgi\_pass 127.0.0.1:9000;
fastcgi\_index index.php;
fastcgi\_param SCRIPT\_FILENAME
/var/www/nginx-default$fastcgi\_script\_name;
include /etc/nginx/fastcgi\_params;
}
# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
#location ~ /.ht {
#deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based
configuration
#
#server {
#listen 8000;
#listen somename:8080;
#server\_name somename alias another.alias;
#location / {
#root html;
#index index.html index.htm;
#}
#}
# HTTPS server
#
#server {
#listen 443;
#server\_name localhost;
#ssl on;
#ssl\_certificate cert.pem;
#ssl\_certificate\_key cert.key;
#ssl\_session\_timeout 5m;
#ssl\_protocols SSLv2 SSLv3 TLSv1;
#ssl\_ciphers
ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
#ssl\_prefer\_server\_ciphers on;
#location / {
#root html;
#index index.html index.htm;
#}
#}
末、收尾
创建一个脚本,让spawn-fcgi开机自动运行。
echo "spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-cgi" > /usr/sbin/fast-cgi.sh
chmod a+x /usr/sbin/fast-cgi.sh
echo "/usr/sbin/fast-cgi.sh" >> /etc/rc.local
这样就可以了,注:Debian中的rc.local默认会有exit 0 ,一定要把脚本加在exit 0之前执行。