月度归档:2010年10月

Centos5.5上LNMP(spawn-fcgi)平台搭建

服务器换机房,且需要重装系统。老大要求。在服务器上安装centos5.5上安装基本软件外其他一概不装。以最小化安装方式。。。于是环境搭建就交给我了。omg。之前装过一次惨不忍睹,全编译安装才用gcc一个包一个包的编译。。找包的依赖库头都是大的。折腾了近一个星期。。。好吧。这次老大好歹还发了个安装步骤及需要的包。方便点了。
好了。开始。 
新整理的一些依赖包集合,在这里

首先安装包:

|–php依赖包
|–eaccelerator-0.9.6.1.tar.bz2
|–freetype-2.4.2.tar.gz
|–gd-2.0.35.tar.gz
|–gettext-0.18.1.1.tar.gz
|–jpegsrc.v8b.tar.gz
|–libiconv-1.13.1.tar.gz
|–libmcrypt-2.5.7.tar.gz
|–libpng-1.2.44.tar.gz
|–libxml2-2.7.7.tar.gz
|–mcrypt-2.6.8.tar.gz

|–mhash-0.9.9.9.tar.gz

|–zlib-1.2.5.tar.gz
|–mysql

|–mysql-5.0.89-linux-i686-glibc23.tar.gz
|–nginx
|–nginx-0.8.49.tar.gz
|–pcre-8.10.tar.gz
|–php扩展
|–PDO_MYSQL-1.0.2.tgz
|–php-5.2.14.tar.gz
|–ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz

|–spawn管理包
|–spawn-fcgi-1.6.3.tar.gz
|–vsftpd
|–vsftpd-2.3.2.tar.gz

~~~
好了系统安装好了。默认是安装了ssh的。虽然可以用psftp.exe通过ssh来上传文件;但ftp还是必须的。所以我首先安装的是ftp;当然vsftpd.2.3.3.tar.gz还是通过psftp上传上去的。安装方法看这里:Centos5.5上vsftpd安装使用

首先把这些软件都上传到服务器某个目录下。我是这样安装的lnmp都是安装在我自定义的目录下的。所以先建了这些目录。
/opt/software #存放所以软件包的地方
/opt/wwwroot  #站点文件存放地方
/opt/module/   # mysql nginx php安装的文件的目录
/opt/data/   # data目录存放入mysql data数据。或备份数据

一、安装nginx

groupadd www
useradd -g www www
安装先决条件
tar -zxvf pcre-8.10.tar.gz
cd pcre-8.10
./configure
make&&make install

tar zxvf nginx..gz
cd nginx
./configure –user=www –group=www –prefix=/opt/module/nginx –with-http_stub_status_module –with-http_ssl_module
make&make install

启动nginx
/opt/module/nginx/sbin/nginx &
注意:安装好后,且确定启动了。那么必须要在iptables防火墙中开启80端口。不然可能怎么都看不到“welcome to nginx”

修改iptables方法如下。
可以先查看iptables端口状态;/etc/init.d/iptables status
vi /etc/sysconfig/iptables
可以看到22端口的那一行。
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
如果你要添加80端口那么直接复制22这一行。粘贴到-A RH-Firewall-1-INPUT -j REJECT –reject-with icmp-host-prohibited 的上面,同样如果你要开发3306端口那么也这样复制一段把22修改为3306则可。保存。iptables必须要重启来能使用。service iptables restart;于是你就可以看到welcome to nginx了。

二、安装mysql
mysql-5.0.89-linux-i686-glibc23.tar.gz 由于mysql是二进制包。所以还是比较方便的。
直接解压。然后移动。

mv mysql-5.0.89-linux-x86_64-glibc23 /opt/module/mysql
cd /opt/module/mysql
groupadd mysql
useradd -g mysql mysql
chown -R mysql .
chgrp -R mysql .
chown -R root .

./scripts/mysql_install_db –user=mysql –basedir=/opt/module/mysql –datadir=/opt/data/mysql
cd /opt/data/mysql/
cp /opt/module/mysql/support-files/my-huge.cnf /etc/my.cnf
cp /opt/module/mysql/support-files/mysql.server  /etc/rc.d/init.d/mysqld

chmod 755 /etc/rc.d/init.d/mysqld
chkconfig –add mysqld
chkconfig mysqld on

启动 /opt/module/mysql/bin/mysqld_safe &

注:这里可能会出现错误。
[root@localhost mysql]# Starting mysqld daemon with databases from /opt/module/mysql/data
STOPPING server from pid file /opt/module/mysql/data/localhost.localdomain.pid
101029 17:49:43  mysqld ended
这是因为basedir与datadir目录未设置的问题。那么在/etc/my.cnf  [mysqld]里和
/etc/rc.d/init.d/mysqld里面都上
添加basedir = /opt/module/mysql   datadir=/opt/data/mysql  (这都是我的目录,相应改成你的目录)

再次启动。就应该可以了。

三、php安装

首先是php的依赖包!
libiconv-1.13.1.tar.gz
libmcrypt-2.5.8.tar.gz
libxml2-2.7.7.tar.gz
libpng-1.2.44.tar.gz
mhash-0.9.9.9.tar.gz
mcrypt-2.6.8.tar.gz
freetype-2.4.2.tar.gz
jpegsrc.v8b.tar.gz
gd-2.0.35.tar.gz

gettext-0.18.1.1.tar.gz

zlib-1.2.5.tar.gz

 

tar zxvf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1/
./configure –prefix=/usr/local
make
make install
cd ../

tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure
make
make install
cd libltdl/
./configure –enable-ltdl-install
make
make install
cd ../../

tar zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9/
./configure
make
make install
cd ../
ln命令在某个地方建立一个同步的链接
ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8

ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2

ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1
ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config


tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
/sbin/ldconfig
./configure
make
make install
cd ../

tar -zxvf freetype-2.4.2.tar.gz
cd freetype-2.4.2/
./configure –prefix=/opt/module/lib/freetype
make && make install
cd ../

tar zxvf libpng-1.2.44.tar.gz
cd libpng-1.2.44/
./configure
make && make install
cd ../

tar zxvf jpegsrc.v8b.tar.gz
cd jpeg-8b/
./configure –enable-static –enable-shared
make && make install
cd ../

tar zxvf gd-2.0.35.tar.gz
cd gd-2.0.35/
./configure –prefix=/opt/module/lib/gd –with-freetype=/opt/module/lib/freetype –with-jpeg –with-png
make
make install
cd ../

tar zxvf gettext-0.18.1.1.tar.gz
cd gettext-0.18.1.1/
./configure
make
make install
cd ../

tar zxvf libxml2-2.7.7.tar.gz
cd libxml2-2.7.7/
./configure –prefix=/opt/module/lib/libxml
make && make install

cd ../

 

tar zxvfzlib-1.2.5.tar.gz

cd zlib-1.2.5

./configure

make&&make install

cd ../

解压php安装包。
tar -zxvf php-5.2.14.tar.gz
cd php-5.2.14/
./configure –prefix=/opt/module/php –with-config-file-path=/opt/module/php/etc –with-mysql=/opt/module/mysql –with-mysqli=/opt/module/mysql/bin/mysql_config –with-iconv-dir=/usr/local –with-freetype-dir=/opt/module/lib/freetype –with-jpeg-dir=/usr/local  –with-png-dir=/usr/local  –with-zlib –with-libxml-dir=/usr –enable-xml –disable-rpath –enable-discard-path –enable-safe-mode –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –with-curl –with-curlwrappers –enable-mbregex –enable-fastcgi –enable-fpm –enable-force-cgi-redirect –enable-mbstring –with-mcrypt –with-gd=/opt/module/lib/gd –enable-gd-native-ttf –with-openssl –with-mhash –enable-pcntl –enable-sockets –with-ldap –with-ldap-sasl –with-xmlrpc –enable-zip –enable-soap –with-gettext

make ZEND_EXTRA_LIBS=’-liconv’
make install 
# 
注:这里可能会出现错误。

Installing PEAR environment:      /opt/module/php/lib/php/
/opt/software/php-5.2.14/sapi/cli/php: error while loading shared libraries: libmysqlclient.so.15: cannot open shared object file: No such file or directory
make[1]: *** [install-pear-installer] Error 127
make: *** [install-pear] Error 2
说没找到libmysqlclient.so.15 那么解决方法。
cp /opt/module/mysql/lib/libmysqlclient.so.15 /usr/lib
再次make install 搞定!

cp php.ini-dist   /opt/module/php/etc/php.ini

四、安装spawn-fcgi-1.6.3.tar.gz

tar zxvf spawn-fcgi-1.6.3.tar.gz
cd spawn-fcgi-1.6.3
./configure
make && make install

五、php和nginx整合

修改nginx配置文件nginx.conf
=========下面这一段添加到nginx.conf中的http{} 之间===========
#upstream
upstream  spawn {
# ip_hash;
server   127.0.0.1:9000 max_fails=0 fail_timeout=30s;
server   127.0.0.1:9001 max_fails=0 fail_timeout=30s;
}

======================================================
在server{} 中的 index 后面加上index.php。
然后把这一段的注释取消。
location ~ \.php$ {
root           html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /opt/module/nginx/html$fastcgi_script_name;
#原scripts改为你需要测试的目录,我这里是/opt/module/nginx/html;否则会报这样的“Nginx no input file specified”错。
include        fastcgi_params;
}

nginx.conf配置完成。

nginx启动,以此为例;可以先车市nginx配置是否正确,/opt/module/nginx/sbin/nginx -t 如果没错误,则可/opt/module/nginx/sbin/nginx &直接启动了。

nginx重启 /opt/module/nginx/sbin/nginx -s reload

 

 

创建spawn-fcgi文件。
#mkdir /opt/module/php/sbin
# vi /opt/module/php/sbin/spawn-fcgi

#! /bin/sh
set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="spawn-fcgi daemon"
NAME=spawn-fcgi
DAEMON=/usr/local/bin/$NAME

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

d_start() {
$DAEMON -a 127.0.0.1 -p 9000 -C 128 -u www -g www -f /opt/module/php/bin/php-cgi > /dev/null 2>&1

$DAEMON -a 127.0.0.1 -p 9001 -C 128 -u www -g www -f /opt/module/php/bin/php-cgi > /dev/null 2>&1 || echo -n " already running"

spawn-fcgi写入完成后,要让他的权限为可执行,不然不能正常运行。

chmod a+x spawn-fcgi 

#
#注意这里/opt/module/php/bin/php-cgi要改为你自己的php安装目录。
#

}

d_stop() {
/usr/bin/killall -9 php-cgi > /dev/null 2>&1 || echo -n " not running"
}

case "$1" in
start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;
restart)
echo -n "Restarting $DESC: $NAME"
d_stop
sleep 1
d_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 3
;;
esac

exit 0

同样都要开放相应端口,这里的是9000和9001。
启动!/opt/module/php/sbin/spawn-fcgi start
如看到“Starting spawn-fcgi daemon: spawn-fcgi.”  则表示启动成功了。

然后再/opt/module/nginx/html 目录中放入index.php ;其中写上 phpinfo(); 如正常的话,则可以看到配置信息了。


六、安装扩展

tar -jxvf eaccelerator-0.9.6.1.tar.bz2 //php加速扩展
cd eaccelerator-0.9.6.1
/opt/module/php/bin/phpize
./configure –enable-eaccelerator=shared –with-php-config=/opt/module/php/bin/php-config –prefix=/opt/module/lib/eaccelerator
make && make install

pdo_mysql
/opt/module/php/bin/phpize
./configure –with-php-config=/opt/module/php/bin/php-config –with-pdo-mysql=/opt/module/mysql
Make && make install
Extension_dir = /opt/module/php/lib/php/extensions/no-debug-non-zts-20060613/

vi php.ini
extension_dir = "/opt/module/php/lib/php/extensions/no-debug-non-zts-20060613/"
extension=eaccelerator.so
extension=pdo_mysql.so

tar zxvf ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
cd ZendOptimizer-3.3.3-linux-glibc23-i386
./install
按步骤安装。注意最后一下会询问你是否采用的是apache服务器,这里我们用的是nginx所以点击NO

好了。重启php-cgi ;杀掉所以php-cgi 进程。killall -9 php-cgi  再次启动 /opt/module/php/sbin/spawn-fcgi start

如果一切顺利,那么就可以找到pdo,pdo_mysql, eaccelerator  ,with Zend Extension Manager v1.2.2!
大功告成!

假如你的站点配置太多了。不可能全部都写到nginx.conf ;可以这样。在nginx.conf 的 http 中最下面添加。
include /opt/module/nginx/conf/vhosts/*;

然后新建。
#mkdir /opt/module/nginx/conf/vhosts
#vi vhosts/www.linuxtone.org.conf
server
{
listen       80;
server_name  www.test.org .test.org;
index index.html index.htm index.php;
root  /opt/wwwroot/test.com;
location ~ .*\.php?$
{
fastcgi_pass spawn;
include /opt/module/nginx/conf/fastcgi.conf;
fastcgi_index  index.php;
}
location ~* \.(js|css|jpg|jpeg|gif|png)$ {
if (-f $request_filename) {
access_log   off;
expires      1d;
break;
}
}
}
重启nginx;
在/opt/wwwroot/test.com 目录存入index.php 文件;如正常显示,则配置成功!!!

Centos5.5上vsftpd安装使用

参考地址:

文件:vsftpd-2.3.2.tar.gz
首先安装vsftpd:

cd /opt/software

tar -zxvf vsftpd-2.3.2.tar.gz

cd vsftpd-2.3.2

修改配置文件

vi builddefs.h

/********************************************

#ifndef VSF_BUILDDEFS_H

#define VSF_BUILDDEFS_H

#define VSF_BUILD_TCPWRAPPERS

#undef VSF_BUILD_PAM

#define VSF_BUILD_SSL

#endif /* VSF_BUILDDEFS_H */

***************************************************/

编译

make

检查是否完成编译

ls -l vsftpd

-rwxr-xr-x  1 root root 84712 Jun  6 18:56 vsftpd  //可执行程序已被编译成功

创建必要的帐号,目录:

useradd nobody

mkdir /usr/share/empty

mkdir /var/ftp

useradd -d /var/ftp ftp

chown root:root /var/ftp

chmod og-w /var/ftp
如果已存在,则不用管继续。

安装vsftp配置文件,可执行程序,man等:

install -m 755 vsftpd /usr/local/sbin/vsftpd

install -m 644 vsftpd.8 /usr/share/man/man8

install -m 644 vsftpd.conf.5 /usr/share/man/man5

install -m 644 vsftpd.conf /etc/vsftpd.conf

安装完成
修改vsftpd配置文件
vi /etc/vsftpd.conf

以下项修改为:
Write_enable = yes
local_enable = yes
如果还允许匿名登录则anonymous_enable=yes ;一般匿名用户是不准上传和修改的权限的。
添加
listen_port=21

tcp_wrappers=YES //支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)

listen=YES的意思是使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式),注意事项请参看匿名用户的配置。
启动:/usr/local/sbin/vsftpd /etc/vsftpd.conf &

然后添加vsftpd用户!
参考文档:hi.baidu.com/lssbing/blog/item/bae673506cc330571138c233.html
#mkdir /opt/srsman         //首先创建好目录

# adduser -d /opt/srsman -g ftp -s /sbin/nologin srsman   //-s

/sbin/nologin是让其不能登陆系统,-d 是指定用户目录为/opt/srsman

# passwd srsman

Changing password for user beinan.//接下来会出现让你设置新的密码

New password:

Retype new password:
passwd: all authentication tokens updated successfully

限制用户目录,不得改变目录到上级

修改/etc/vsftpd/vsftpd.conf
将这两行
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd.chroot_list
注释去掉
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

新增一个文件: /etc/vsftpd/chroot_list
内容写需要限制的用户名:
srsman

重新启动vsftpd
============================================

可能出现的错误。

一、500 OOPS: could not bind listening IPv4 socket、

chkconfig vsftpd –level 3 off

二、500 OOPS: vsftpd: refusing to run with writable anonymous root

这表示ftp用户的家目录的权限不对,应该改过才对;
[root@localhost ~]# more /etc/passwd |grep ftp
ftp:x:1000:1000:FTP User:/var/ftp:/sbin/nologin

修正这个错误,应该用下面的办法;
[root@localhost ~]# chown root:root /var/ftp
[root@localhost ~]# chmod 755 /var/ftp

或采用 killall vsftpd结束进程,进行再次重启

三、Socket链接超时

[右] 227 Entering Passive Mode (192,168,1,218,62,93).

[右] 正在打开数据连接 IP: 192.168.1.218 端口: 15965

[右] 数据 Socket 错误: 无法连接主机

[右] 列表错误

[右] PASV 模式失败, 尝试 PORT  模式。

答:经常登录各种FTP服务器,会遇到socket错误,几种目前常用FTP软件的解决办法如下:

★Cute FTP 3.5英文版:FTP—>Settings—>Options—>Firewall,将“PASV mode”前复选框中的打勾去掉。

★Cute FTP3.5中文版:FTP—>设置—>选项—>防火墙,“PASV方式(A)”前复选框中的打勾去掉。

★Cute FTP4.0中文版:右击你所建立的ftp站点—>选择属性(properties)—>去掉"use PASV mod" 选择项

★Cute FTP Pro2.0中文版:编辑—>全局设置—>连接—>连接类型,“PASV/PORT”下拉选项菜单选择PORT。

★Leap FTP2.7.2:Sites—>Site Manager—>Advanced,将“Use PASV mode”前复选框中的打勾去掉。

★flashfxp : 选项->参数->代理->去掉“使用被动模式”

★flashget : 选项->参数->代理服务器->编辑->将“Use PASV mode”前复选框中的打勾去掉。

一般出现此类问题的原因是客户端网络出口与服务器端防火墙的端口设置冲突造成的。 所以对于其他软件只要不选择PASV为连接类型,一般都可以解决这类问题了

 

四、用户成功登陆却不能正常上传文件

这是目标文件夹权限不够的问题。修改权限为777则好了。
chmod 777 /xxx/xxx/

FTP连接时出现“227 Entering Passive Mode” 的解决方法

今天从公网的服务器连接本地内网的FTP server copy文件时,系统老是提示227 Entering
Passive Mode
(xxx,xxx,,xxx,xxx,x),很是奇怪,于是上网找资料仔细研究了一下,原来FTP有两种工作模式,PORT方式和PASV方式,中文意思
为主动式和被动式 ,详细介绍如下:

       主动 FTP :
命令连接:客户端 >1024 端口 → 服务器 21 端口
数据连接:客户端 >1024 端口 ← 服务器 20 端口

  被动 FTP :
命令连接:客户端 >1024 端口 → 服务器 21 端口
数据连接:客户端 >1024 端口 ← 服务器 >1024 端口

PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据
时,
客户端在命令链路上用PORT命令告诉服务器:“我打开了***X端口,你过来连接我”。于是服务器从20端口向客户端的***X端口发送连接请求,建立
一条数据链路来传送数据。   

 

PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据
时,
服务器在命令链路上用PASV命令告诉客户端:“我打开了***X端口,你过来连接我”。于是客户端向服务器的***X端口发送连接请求,建立一条数据链
路来传送数据。 

由于我的本地FTP服务器在内网,只是从外网映射了两个端口(20,21),所以无法使用PASV方式,解决此问题的办法也很简单,关闭客户端的PASV方式,强制其用PORT方式访问服务器,登录FTP服务器后用passive命令关闭客户端的PASV方式,如下: 

ftp> passive
Passive mode off.

ftp> passive (再次运行命令可打开)

Passive mode on.


-bash: ls: command not found

这样的错误一般是修改了 ~/.bash_profile文件的原因。我想把mysql服务加入的path中所以修改了一下。没想到却出问题了,基础命令全部都不能正常使用了。虽然之前这么改的一点问题都没有。囧。。。

vi .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/opt/module/mysql/bin:$home/mysql

export PATH
unset USERNAME

## 我添加的mysql path
#PATH=$PATH:/opt/module/mysql/bin
#export PATH

保存,然后执行重新载入命令 source ~/.bash_profile

没错。mysql可以直接命令运行了。不必再到/bin目录下执行了。

可是ls vi等却没了反应。。。新手啊。碰到这问题就无疑恐惧的不行。我就是。。

只好baidu了。说是这么修改: zhidao.baidu.com/question/110077103.html

建议:改成PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:$home/mysql

vi用不了了。怎么进入修改.bash_profile呢?网上看到的一些命令都是在/bin/ 、/sbin/ 下面。只好用全路径了。/bin/bi ~/.bash_profile 就进去了。像 init 命令就是在/sbin/ 下面。

然后。我再次保存;执行source ~/.bash_profile  是用ls检验。却还是报command not found这个错。没辙了。。。只好重启,进入。呵。好了。

搞完了我再次测了下。
#PATH=$PATH:/opt/module/mysql/bin
#export PATH
这么添加是没有问题的。那就不懂了。。哪位知道的指教下。。。

Nginx no input file specified错误解决方案

在配置好spawn-fcgi和nginx的整合后。测试phpinfo(); 不料出现了这样一个错误。
no input file specified
网上找了两处答案。
一、aayy520.blog.163.com/blog/static/23182260200910251919683/

1、网上大多数的都说的是这个原因:fastcgi_param    SCRIPT_FILENAME    $document_root$fastcgi_script_name;
这句需要加入fcgi.conf文件;(这句一般安装后nginx后都有,在你的nginx安装目录下 /conf/fastcgi.conf

2、第二个原因是我遇到的:对应document_root的权限必须与nginx.conf和fcgi.conf的用户一样,如果不一样,请修改:
[root@www03 ~]# chown -R user:user /data/htdocs/group/group

主要问题可能都不是在这。

二、www.68design.net/Development/PHP/27060-1.html

首先php.ini的配置中

cgi.fix_pathinfo=1
doc_root= 

nginx中的配置有些麻烦

fastcgi_pass 127.0.0.1:1234;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;

每个虚机要根据自己不通的虚机设置不能的目录,要保证这个路径正确。
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;不能在fastcgi_pass 127.0.0.1:1234;的前面。

记得修改了php.ini要重启fastcgi服务。

我的的问题是上面这个,没有指定document_root目录。/conf/nginx.conf中的还是原样/script当然也就不能正常了。

基于CentOS 5.4搭建nginx+php+spawn-fcgi+mysql高性能php平台[转]

这篇文档纯粹转载而来,其中的方法仅供参考,没有必要非照上面一行行的写。
只要必要的依赖包都安装了,配置文件都正确配置。问题不是很大,尽管可能会搞的焦头烂额,不过多配几次就好了。

其中我主要参考的是spawn-fcgi的配置方法。

系统安装
1.1平台环境:
CentOS 5.4 x86_64 GNU/Linux
nginx-0.8.21
php-5.2.9
spawn-fcgi-1.6.3
mysql-5.1.34

1.2系统安装及分区:
1.2.1操作系统安装:
安装过程中选择最少的包,采用文本模式安装,不安装图形。

1.2.3系统分区:
/boot  100M    (大约100左右)
SWAP  4G      物理内存的2倍(如果你的物理内存大于4G,分配4G即可)
/50G
/data             剩余所有空间.

注:具体分区请根据相关业务划分
1.2.4系统软件包安装规范
系统约定:
软件源代码包存放位置             /usr/local/src
源码包编译安装位置(prefix)     /usr/local/software_name
脚本以及维护程序存放位置       /usr/local/sbin
MySQL 数据库位置                /data/mysql/data(可按情况设置)
网站根目录                          /data/www/wwwroot(可按情况设置)
虚拟主机日志根目录               /data/logs(可按情况设置)
Nginx运行账户                     www:www
install_software_name.sh     //存放编译参数脚本习惯将所有编译脚本存放在install_software_name.sh便于升级和更新软件.
1.3.系统初始化
#vi init_network.sh
#welcome
cat << EOF
+————————————————————–+
|         === Welcome to Centos System init ===                |
+————————————————————–+
+———————-Author:NetSeek————————–+
EOF
#disable ipv6
cat << EOF
+————————————————————–+
|         === Welcome to Disable IPV6 ===                      |
+————————————————————–+
EOF
echo "alias net-pf-10 off" >> /etc/modprobe.conf
echo "alias ipv6 off" >> /etc/modprobe.conf
/sbin/chkconfig –level 35 ip6tables off
echo "ipv6 is disabled!"
#disable selinux
sed -i ‘/SELINUX/s/enforcing/disabled/’ /etc/selinux/config
echo "selinux is disabled,you must reboot!"
#vim
sed -i "8 s/^/alias vi=’vim’/" /root/.bashrc
echo ‘syntax on’ > /root/.vimrc
#zh_cn
sed -i -e ‘s/^LANG=.*/LANG="en"/’   /etc/sysconfig/i18n
#init_ssh
ssh_cf="/etc/ssh/sshd_config"
sed -i -e ’74 s/^/#/’ -i -e ’76 s/^/#/’ $ssh_cf
sed -i "s/#UseDNS yes/UseDNS no/" $ssh_cf
#client
sed -i -e ’44 s/^/#/’ -i -e ’48 s/^/#/’ $ssh_cf
echo "ssh is init is ok………….."
#chkser
#tunoff services
#——————————————————————————–
cat << EOF
+————————————————————–+
|         === Welcome to Tunoff services ===                   |
+————————————————————–+
EOF
#———————————————————————————
for i in `ls /etc/rc3.d/S*`
do
CURSRV=`echo $i|cut -c 15-`
echo $CURSRV
case $CURSRV in
crond | irqbalance | microcode_ctl | network | random | sendmail | sshd | syslog | local | mysqld )
echo "Base services, Skip!"
;;
*)
echo "change $CURSRV to off"
chkconfig –level 235 $CURSRV off
service $CURSRV stop
;;
esac
done

1.4 系统环境部署及调整
检查系统是否正常
# tail -n100 /var/log/messages   (检查有无系统级错误信息)
# dmesg                     (检查硬件设备是否有错误信息)
# ifconfig                    (检查网卡设置是否正确)
# ping
www.linuxtone.org       (检查网络是否正常)
1.5使用 yum 程序安装所需开发包
1.5.1 更换快源
#cd /etc/yum.repos.d/
#mv CentOS-Base.repo CentOS-Base.repo.linuxtone
#wget http://docs.linuxtone.org/soft/lemp/CentOS-Base.repo

1.5.2 yum安装相关软件包:
#yum -y install ntp vim-enhanced gcc gcc-c++ gcc-g77 flex bison autoconf automake glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel libtool* zlib-devel libxml2-devel libjpeg-devel libpng-devel libtiff-devel fontconfig-devel freetype-devel libXpm-devel gettext-devel curl curl-devel pam-devel e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

1.6 定时校正服务器时钟,定时与中国国家授时中心授时服务器同步
# crontab -e
加入一行:
15 3 * * * /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1

1.7下载相关软件包
#cd /usr/local/src
#vi list_tar.list
http://docs.linuxtone.org/soft/lemp/ImageMagick.tar.gz

http://docs.linuxtone.org/soft/lemp/PDO_MYSQL-1.0.2.tgz

http://docs.linuxtone.org/soft/lemp/eaccelerator-0.9.5.3.tar.bz2

http://docs.linuxtone.org/soft/lemp/imagick-2.2.2.tgz

http://docs.linuxtone.org/soft/lemp/libiconv-1.13.tar.gz

http://docs.linuxtone.org/soft/lemp/libmcrypt-2.5.8.tar.gz

http://docs.linuxtone.org/soft/lemp/mcrypt-2.6.8.tar.gz

http://docs.linuxtone.org/soft/lemp/memcache-2.2.5.tgz

http://docs.linuxtone.org/soft/lemp/mhash-0.9.9.9.tar.gz

http://docs.linuxtone.org/soft/lemp/mysql-5.1.34.tar.gz

http://docs.linuxtone.org/soft/lemp/pcre-7.8.tar.gz

http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz

http://docs.linuxtone.org/soft/lemp/php-5.2.9.tar.bz2

http://sysoev.ru/nginx/nginx-0.8.21.tar.gz

http://docs.linuxtone.org/soft/lemp/ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz

#wget -i list_tar.list
1.8.添加nginx 运维账户:
#vi add_webuser.sh
/usr/sbin/groupadd www
/usr/sbin/useradd -g www www
mkdir -p /data/www/wwwroot
chmod +w /data/www/wwwroot
chown www:www /data/www/wwwroot -R

#sh add_webuser.sh

二.编译安装
2.1 编译安装pcre
#tar zxvf pcre-7.8.tar.gz
#cd pcre-7.8
#./configure && make && make install

2.2 编译安装nginx
#tar zxvf nginx-0.8.21.tar.gz
#cd nginx-0.8.21

2.2.1 附加:修改nginx源代码,伪装nginx服务器(仅供参考,安全还得认真做起^.^):
(1).修改gcc
#vi auto/cc/gcc
NGX_GCC_OPT="-O"

修改为:
NGX_GCC_OPT="-O3″

(2).修改nginx.h
#vi nginx-0.8.21/src/core/nginx.h 
#define NGINX_VERSION      "0.7.58″
#define NGINX_VER          "nginx/" NGINX_VERSION

修改为:
#define NGINX_VERSION      "1.0″
#define NGINX_VER          "LTWS/" NGINX_VERSION

(3).修改nginx_http_header_filter_module
#vi nginx-0.8.21/src/http/ngx_http_header_filter_module.c
static char ngx_http_server_string[] = "Server: nginx" CRLF;

修改为:
static char ngx_http_server_string[] = "Server: LTWS" CRLF;

(4).修改ngx_http_special_response.c
#vi nginx-0.8.21/src/http/ngx_http_special_response.c
将如下
static u_char ngx_http_error_full_tail[] =
"<hr><center>" NGINX_VER "</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;

static u_char ngx_http_error_tail[] =
"<hr><center>nginx</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;

修改为:
static u_char ngx_http_error_full_tail[] =
"<hr><center> "NGINX_VER" </center>" CRLF
"<hr><center>http://www.linuxtone.com</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;

static u_char ngx_http_error_tail[] =
"<hr><center>HMGWS</center>" CRLF
"</body>" CRLF
"</html>" CRLF
;

2.2.2 nginx 编译安装
./configure \
"–user=www" \
"–group=www" \
"–prefix=/usr/local/nginx/" \
"–with-http_stub_status_module" \
"–with-http_ssl_module" \
"–with-md5=/usr/lib" \
"–with-sha1=/usr/lib"
make
make install

2.3 编译安装配置mysql
./configure \
"–prefix=/usr/local/mysql" \
"–localstatedir=/data/mysql/data" \
"–with-comment=Source" \
"–with-server-suffix=-Linuxtone.Org" \
"–enable-assembler" \
"–with-charset=gbk" \
"–with-collation=gbk_chinese_ci" \
"–with-collation=gbk_chinese_ci" \
"–with-extra-charsets=complex" \
"–enable-thread-safe-client" \
"–with-big-tables" \
"–with-readline" \
"–with-ssl" \
"–with-embedded-server" \
"–enable-local-infile" \
"–with-plugins=innobase"
make
make install
useradd mysql -d /data/mysql -s /sbin/nologin
/usr/local/mysql/bin/mysql_install_db –user=mysql
cd /usr/local/mysql
chown -R root:mysql .
mkdir -p /data/mysql/data
chown -R mysql /data/mysql/data
cp share/mysql/my-huge.cnf /etc/my.cnf.bak
wget http://www.caifw.com/api/my.cnf
sed -i ’50 s/^/#/’ /etc/my.cnf
cp share/mysql/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
chkconfig –add mysqld
/etc/rc.d/init.d/mysqld start

cd /usr/local/mysql/bin
for i in *; do ln -s /usr/local/mysql/bin/$i /usr/bin/$i; done

2.4 编译安装php
(php依赖包,必须的;如在./configure 提示error错误那可能是缺少什么包了。对编译有影响)
2.4.1安装php相应的lib
2.4.1.1 libiconv-1.13
#tar zxvf libiconv-1.13.tar.gz
#cd libiconv-1.13
#./configure –prefix=/usr && make && make install

2.4.1.2 libmcrypt-2.5.8
#tar zxvf libmcrypt-2.5.8.tar.gz
#cd libmcrypt-2.5.8/
#./configure –prefix=/usr && make && make install
#echo "/usr/lib" >> /etc/ld.so.conf
#ldconfig
#cd libltdl/
#./configure –enable-ltdl-install
#make && make install

2.4.1.3 mhash-0.9.9.9
#tar zxvf mhash-0.9.9.9.tar.gz
#cd mhash-0.9.9.9
#./configure –prefix=/usr && make && make install
#ldconfig

2.4.1.4 mcrypt-2.6.8
#tar zxvf mcrypt-2.6.8.tar.gz
#cd mcrypt-2.6.8
#./configure –prefix=/usr && make&& make install

spawn-fcgi管理
2.4.2 安装spawn-fcgi
#tar zvxf spawn-fcgi-1.6.3.tar.gz
#cd spawn-fcgi-1.6.3
#./configure && make && make install

2.4.3 安装php
#tar jvxf php-5.2.9.tar.bz2
#vi install_php.sh
./configure  \
"–prefix=/usr/local/php" \
"–enable-fastcgi" \
"–enable-fpm" \
"–enable-discard-path" \
"–enable-force-cgi-redirect" \
"–with-config-file-path=/usr/local/php/etc" \
"–with-mysql=/usr/local/mysql" \
"–with-mysqli=/usr/local/mysql/bin/mysql_config" \
"–with-iconv-dir" \
"–with-freetype-dir" \
"–with-jpeg-dir" \
"–with-png-dir" \
"–with-gd" \
"–with-zlib" \
"–with-libxml-dir" \
"–with-curl" \
"–with-curlwrappers" \
"–with-openssl" \
"–with-mhash" \
"–with-xmlrpc" \
"–with-mcrypt" \
"–with-ldap" \
"–with-ldap-sasl" \
"–enable-xml" \
"–disable-rpath" \
"–enable-discard-path" \
"–enable-safe-mode" \
"–enable-bcmath" \
"–enable-shmop" \
"–enable-sysvsem" \
"–enable-inline-optimization" \
"–enable-mbregex" \
"–enable-mbstring" \
"–enable-gd-native-ttf" \
"–enable-ftp" \
"–enable-pcntl" \
"–enable-sockets" \
"–enable-zip" \
"–disable-debug" \
"–disable-ipv6″
make ZEND_EXTRA_LIBS=’-liconv’
make install
cp php.ini-dist /usr/local/php/etc/php.ini

#sh install_php.sh
2.4.4安装PHP扩展模块
2.4.4.1 memcache-2.2.5
#tar zvxf memcache-2.2.5.tgz
#cd memcache-2.2.5
#/usr/local/php/bin/phpize
#./configure –with-php-config=/usr/local/php/bin/php-config
#make && make install

2.4.4.2 eaccelerator-0.9.5.3
#tar jvxf eaccelerator-0.9.5.3.tar.bz2
#cd eaccelerator-0.9.5.3
#/usr/local/php/bin/phpize
#./configure –enable-eaccelerator=shared –with-php-config=/usr/local/php/bin/php-config
#make && make install

pdo_mysql不要忘记了。在windows下面久了,就有定向思维了。。
2.4.4.3 PDO_MYSQL-1.0.2
#tar zxvf PDO_MYSQL-1.0.2.tgz
#cd PDO_MYSQL-1.0.2
#/usr/local/php/bin/phpize
#./configure –with-php-config=/usr/local/php/bin/php-config –with-pdo-mysql=/usr/local/mysql
#make && make install

2.4.4.4 ImageMagick
#tar zxvf ImageMagick.tar.gz
#cd ImageMagick-6.5.1-2/  
#./configure –enable-shared –with-modules –without-x –with-gs-font-dir=default –with-perl=yes –with-xml=yes –with-zlib=yes –with-jpeg=yes
# make && make install

2.4.4.5 imagick-2.2.2
#tar zxvf imagick-2.2.2.tgz
#cd imagick-2.2.2/
#/usr/local/php/bin/phpize
#./configure –with-php-config=/usr/local/php/bin/php-config
#make
#make install

2.4.5脚本配置php.ini
# vi init_php.ini
#!/bin/bash
fcgi_cf="/usr/local/php/etc/php.ini"
ea(){
cat << EOF
[eAccelerator]
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="32″
eaccelerator.cache_dir="/data/cache/ea"
eaccelerator.enable="1″
eaccelerator.optimizer="1″
eaccelerator.check_mtime="1″
eaccelerator.debug="0″
eaccelerator.filter=""
eaccelerator.shm_max="0″
eaccelerator.shm_ttl="0″
eaccelerator.shm_prune_period="0″
eaccelerator.shm_only="0″
eaccelerator.compress="1″
eaccelerator.compress_level="9″
EOF
}
#mkdir
mkdir -p /data/cache/ea
ea >> $fcgi_cf
#config for php.ini
sed -i ‘205 s#;open_basedir =#open_basedir = /data/www/wwwroot:/tmp#g’ $fcgi_cf
sed -i ‘210 s#disable_functions =#;disable_functions = phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server#g’ $fcgi_cf
sed -i ‘/expose_php/s/On/Off/’ $fcgi_cf
sed -i ‘/display_errors/s/On/Off/’ $fcgi_cf
sed -i ‘s#extension_dir = "./"#extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"\nextension = "memcache.so"\nextension = "pdo_mysql.so"\nextension = "imagick.so"\n#’ $fcgi_cf
sed -i ‘s#output_buffering = Off#output_buffering = On#’ $fcgi_cf

zend 优化器也不可少
2.5安装Zend
#tar zvxf ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz
# cd ZendOptimizer-3.3.3-linux-glibc23-x86_64
# ./install

注:php.ini的位置为/usr/local/php/etc
三、配置整合
3.1 配置nginx
注:本文spawn-fcgi开启9000跟9001两个端口,利用nginx的upstream负载均衡php程序到不同的fcgi端口上面,解决502 gateway错误
#cd /usr/local/nginx/conf
#cp nginx.conf nginx.conf.linuxtone
#vi nginx.conf

user  www www;  #用户更改

worker_processes 10;

pid /var/run/nginx.pid;  #你自己对应的nginx.pid一般不需更改
# [ debug | info | notice | warn | error | crit ]
error_log  /dev/null;
#error_log /data/logs/nginxerror.log;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
{
use epoll;

#maxclient = worker_processes * worker_connections / cpu_number
worker_connections 51200;
}

http
{
include       /usr/local/nginx/conf/mime.types;
default_type  application/octet-stream;
#charset  gb2312;
charset gbk;
log_format  main  ‘$remote_addr – $remote_user [$time_local] $request ‘
‘"$status" $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for"’;

#access_log  /data/www/logs/access.log  main;
access_log  /dev/null;

#General Options
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
ignore_invalid_headers   on;
recursive_error_pages    on;
server_name_in_redirect off;

sendfile                 on;

#timeouts
keepalive_timeout 60;

#TCP Options
tcp_nopush  on;
tcp_nodelay on;
#fastcgi options
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;

fastcgi_buffer_size 128k;
fastcgi_buffers 4 128k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_intercept_errors on;
ssi on;
ssi_silent_errors on;
ssi_types text/shtml;
#size limits
client_max_body_size       50m;
client_body_buffer_size    256k;
#gzip  compression
gzip on;
gzip_min_length  0;
gzip_buffers     16 8k;
gzip_http_version 1.0;
gzip_comp_level 9;
gzip_types       text/plain text/css image/x-icon image/png;
gzip_vary on;

#temp files
proxy_temp_path            /dev/shm/proxy_temp;
fastcgi_temp_path          /dev/shm/fastcgi_temp;
client_body_temp_path      /dev/shm/client_body_temp;
#client_body_temp_path  /usr/local/nginx/client_body_temp 1 2;
#proxy_temp_path        /usr/local/nginx/proxy_temp 1 2;
#fastcgi_temp_path      /usr/local/nginx/fastcgi_temp 1 2;

##############需要添加到你自己的nginix.conf中的。##############

#upstream
upstream  spawn {
# ip_hash;
server   127.0.0.1:9000 max_fails=0 fail_timeout=30s;
server   127.0.0.1:9001 max_fails=0 fail_timeout=30s;
}

#####################################################

# The following includes are specified for virtual hosts
#www.linuxtone.org
include          /usr/local/nginx/conf/vhosts/www.linuxtone.org.conf;
}

自定义站点配置文件
#mkdir vhosts
#vi vhosts/www.linuxtone.org.conf
server
{
listen       80;
server_name  www.linuxtone.org .linuxtone.org;
index index.html index.htm index.php;
root  /data/www/wwwroot/linuxtone;  
#自己的站点目录
error_page 404 http://www.linuxtone.org;
#rewrite ^/bbs/(.*) http://bbs.linuxtone.org/$1;
location ~ .*\.php?$
{
fastcgi_pass spawn;
include /usr/local/nginx/conf/spawn_php5.conf; 
#如没有spawn-php5.conf,则直接调用fastcgi.conf;这俩文件是一样的。
fastcgi_index  index.php;
}
location ~* \.(js|css|jpg|jpeg|gif|png)$ {
if (-f $request_filename) {
access_log   off;
expires      1d;
break;
}
}
}

#vi /usr/local/nginx/conf/spawn_php5.conf
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;
fastcgi_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_FILENAME    $document_root$fastcgi_script_name;
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  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;

3.2 配置spawn-fcgi启动脚本
#mkdir /usr/local/php/sbin
# vi /usr/local/php/sbin/spawn-fcgi

###################可以直接复制过去,再修改下。###################
#! /bin/sh

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="spawn-fcgi daemon"
NAME=spawn-fcgi
DAEMON=/usr/local/bin/$NAME

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

d_start() {
$DAEMON -a 127.0.0.1 -p 9000 -C 128 -u www -g www -f /usr/local/php/bin/php-cgi > /dev/null 2>&1
$DAEMON -a 127.0.0.1 -p 9001 -C 128 -u www -g www -f /usr/local/php/bin/php-cgi > /dev/null 2>&1 || echo -n " already running"
}

# 把/usr/local/php/bin/php-cgi 改成你自己的php安装目录

d_stop() {
/usr/bin/killall -9 php-cgi > /dev/null 2>&1 || echo -n " not running"
}

case "$1″ in
start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;
restart)
echo -n "Restarting $DESC: $NAME"
d_stop
sleep 1
d_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 3
;;
esac

exit 0

#chmod 755 /usr/local/php/sbin/spawn-fcgi

四、启动WEB服务

4.1.启动spawn-fcgi
#/usr/local/php/sbin/spawn-fcgi start

4.2.启动nginx
4.2.1检查nginx配置:
# /usr/local/nginx/sbin/nginx –t     //返回如下信息说明配置正确 这个很有用。
the configuration file /usr/local/nginx//conf/nginx.conf syntax is ok
configuration file /usr/local/nginx//conf/nginx.conf test is successful

#/usr/local/nginx/sbin/nginx    //启动nginx

4.3.加入开机启动
#vi /etc/rc.local
在最后加入:
ulimit -SHn 51200
/usr/local/nginx/sbin/nginx
/usr/local/php/sbin/spawn-fcgi start

五、测试
#mkdir /data/www/wwwroot/linuxtone
#vi phpinfo.php
<?php
Phpinfo();
?>

Linux下挂载U盘和移动硬盘[转]

源地址:jackzou.com.cn/share/index.php/archives/1241

1.在插入U盘或硬盘之前,在命令行窗口运行:fdisk -l 命令,需要root用户权限。系统将显示目前所能识别到的硬件存储设备;
内容如:
sda
sda1
sda2
sdb
sdb1
sdb2
等信息,其中,sda与sdb表示目前系统有两个硬盘,后面带有数字表示各个硬盘下的各区目录;
硬盘或存储设备一般都是以sd开头.

2.插入U盘或硬盘,再次运行fdisk -l 命令,系统将再次显示目前所能识别到的硬件存储设备,比较两次输出的不各,将发现第二次运行时会增加一些内容;
系统将在原来的基础上增加显示:sdc,等内容,表示新插入的U盘或移动硬盘是挂靠在系统的sdc下.

3.运行mount,如:
#mkdir /mnt/usb
#mount /dev/sdc /mnt/usb

4.运行完毕,可以直接在/mnt/usb目录下对U盘或移动硬盘的数据进行访问或操作;

5.想断开U盘或移动硬盘之前,运行umount命令,保证数据不会造成丢失,命令如下:
#umount /dev/sdc

6. 对于有中文文件名的盘,需要增加一些选项,例如:如果是ntfs格式硬盘,utf8的文件名

挂载命令就是: #mount -t ntfs -o nls=utf8 /dev/sdc1 /mnt/usb

如果是FAT32格式的,可能就是 #mount -t vfat -o codepage=936,iocharset=cp936 /dev/sdc2 /mnt/winc

或者 #mount -t vfat -o codepage=936,iocharset=utf8 /dev/sdc2 /mnt/winc

其他一些命令:

软盘 # mount -t msdos /dev/fd0 /mnt/floppy
光盘 # mount -t iso9660 /dev/cdrom /mnt/cdrom

四 、自动挂载
每次开机访问windows分区都要运行mount命令显然太烦琐,为什么访问其他的linux分区不用使用mount命令呢?
其实,每次开机时,linux自动将需要挂载的linux分区挂载上了。那么我们是不是可以设定让linux在启动的时候也挂载我们希望挂载的分区,如windows分区,以实现文件系统的自动挂载呢?
这是完全可以的。在/etc目录下有个fstab文件,它里面列出了linux开机时自动挂载的文件系统的列表。我的/etc/fstab文件如下:
/dev/hda2 / ext3 defaults 1 1
/dev/hda1 /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/hda3 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,codepage=936,iocharset=gb2312 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
/dev/hdb1 /mnt/winc vfat defaults,codepage=936,iocharset=cp936 0 0
/dev/hda5 /mnt/wind vfat defaults,codepage=936,iocharset=cp936 0 0

在/etc/fstab文件里,第一列是挂载的文件系统的设备名,第二列是挂载点,第三列是挂载的文件系统类型,第四列是挂载的选项,选项间用逗号分隔。第五六列不知道是什么意思,还望高手指点。
在最后两行是我手工添加的windows下的C;D盘,加了codepage=936和iocharset=cp936参数以支持中文文件名。参数defaults实际上包含了一组默认参数:
rw 以可读写模式挂载
suid 开启用户ID和群组ID设置位
dev 可解读文件系统上的字符或区块设备
exec 可执行二进制文件
auto 自动挂载
nouser 使一般用户无法挂载
async 以非同步方式执行文件系统的输入输出操作
大家可以看到在这个列表里,光驱和软驱是不自动挂载的,参数设置为noauto。(如果你非要设成自动挂载,你要确保每次开机时你的光驱和软驱里都要有盘,呵呵。)

=========附录:以读写方式挂载ntfs分区============
通常ntfs分区挂载上也是只读的,不能写入。不过现在有了新的第三方ntfs驱动,
以Debian为例:

系统:Debian 4.0r2
使用软件:ntfs-3g
1.修改默认源
将/etc/apt/sources.list中etch 修改为deb http://XXXX/debian testing main contrib non-free
执行命令:

apt-get update

2.执行安装
执行命令:

apt-get install ntfs-3g

3.使用

直接使用执行命令:

mount -t ntfs-3g -o force /dev/hdax /mnt/windows
这里的/dev/hdax 请改为你自己的windows磁盘分区,可利用fdisk -l 查看。

如果是加入开机自动映射的话,编辑/etc/fstab,加入如下内容就可以了。

/dev/hdax /mnt/windows ntfs-3g defaults 0 0

关于zend studio 代码自动补全不能正常显示的原因

首先查看下,windows→preferences→php→editor→code assist 下面的enable auto activation 是否为选中的。选中则在正常情况下可按ctrl+/ 自动补全代码,不选中则不能补全代码。

非正常情况下,指在其他项目中可以自动补全;某个项目中却不能自动补全。

这样多半是因为.project 或 .settings缺少文件所致,所以最好的情况就是把一个正常php项目里的.project 和.settings copy到现在所在的那个项目中。然后注意更改.project 中的
<projectDescription>
<name>tools</name>  #这里把tools更改为你的项目名称,然后build项目,在刷新则可。

还有其他人所说的要删除Zend Studio配置目录 you path\.metadata\.plugins\org.eclipse.core.runtime\.settings 下的“org.eclipse.dltk.ui.prefs”这个文件,不过我没找到。。。不是很明白,不过这样可行就ok了。