转自: http://blog.chinaunix.net/space.php?uid=1838361&do=blog&id=66480
一、编译安装PHP 5.2.5所需的支持库
1、wget http://
ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz
tar -xvzf libiconv-1.12.tar.gz
./configure --prefix=/usr/local
make
make install
ln -s /usr/local/lib/libiconv.so.2 /usr/lib/
2、wget http://ftp.twaren.net/Unix/NonGNU/
freetype/freetype-2.3.9.tar.gz
tar -xvzf freetype-2.3.9.tar.gz
./configure
make
make install
3、wget http://voxel.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.35.tar.gz
tar -xvzf libpng-1.2.35.tar.gz
./configure
make
make install
4、wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
tar -xvzf jpegsrc.v6b.tar.gz
./configure --
enable-
static --enable-shar
ed
make
make install
make install-lib
在x86_64位上,checking host system type... Invalid configuration `x86_64-unknown-linux-gnu': machine `x86_64-unknown' not recognized
在做 configure 的时候,报上述的错误。
解决方案:
把 /usr/share/libtool/config.guess 覆盖到相关软件自带的config.guess
把 /usr/share/libtool/config.sub 覆盖到相关软件自带的config.sub
5、#----If your system was install libxml2, you do not need to install it.----
#
如果系统已经安装了libxml2,就不要再安装libxml了,我升级了一下,失败了,出现的错误没有解决
#ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/ 我下载时,最新版为libxml2-2.6.30.tar.gz
#tar zxvf libxml2-2.6.30.tar.gz
#
cd libxml2-2.6.30/
#./configure
#make
#make install
6、yum install libxml2-devel.i386
yum install curl-devel
否则编译php时:
configure: error: xml2-config not found. Please check your libxml2 installation.
7、wget http://voxel.dl.sourceforge.net/sourceforge/
mcrypt/libmcrypt-2.5.8.tar.gz
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure
make
make install
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make
make install
在x86_64位上,./libtool: line 3965: ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib ): command not found
在做 configure 的时候,报上述的错误。
解决方案:
yum -y install libtool-ltdl
yum -y install libtool-ltdl-devel
ln -sf /usr/lib64/libltdl.a /usr/local/lib/libltdl.a
8、wget http://voxel.dl.sourceforge.net/sourceforge/mhash/mhash-0.9.9.9.tar.gz
tar -xvzf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9/
./configure
make
make install
9、cp /usr/local/lib/libmcrypt.* /usr/lib
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
/sbin/ldconfig
10、wget http://voxel.dl.sourceforge.net/sourceforge/mcrypt/mcrypt-2.6.8.tar.gz
tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
./configure
make
make install
二 安装mysql
1、wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.33-linux-i686-glibc23.tar.gz/from/http://mirror.services.wisc.e
du/mysql/
//添加用于启动MySQL的用户及用户组
groupa
dd mysql
useradd mysql -g mysql
tar -C /usr/local/ -xvzf mysql-5.1.33-linux-i686-glibc23.tar.gz
2、//建立符号链接,如果以后有新版本的MySQL的话,你可以仅仅将源码
解压到新的路径,然后重新做一个符号链接就可以了。这样非常方便,
数据也更加安全。
ln -s /usr/local/mysql-5.1.33-linux-i686-glibc23/ /usr/local/mysql
3、//初始化授权表
cd /usr/local/mysql
scripts/mysql_install_db --user=mysql
注意:执行该步骤时,必须将 /etc/mysql/ 下的 my.cnf 文件删除或改名,否则将会报错
4、//修改MySQl目录的所有权
chown -R mysql.mysql /usr/local/mysql-5.1.33-linux-i686-glibc23/
chown -R mysql.mysql /usr/local/mysql
5、//配置系统启动时自动启动MySQl
cp /usr/local/mysql/support-
files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
(另:mysql 5.5.8,启动时:/etc/init.d/mysqld: line 256: my_print_defaults: command not found
修改/etc/init.d/mysqld:
ba
sedir=/usr/local/mysql
datadir=/usr/local/mysql/data)
6、cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
注:my-medium.cnf为中档规模的mysql,更多,查看/usr/local/mysql/support-files/目录
7、//启动Mysql
/service mysqld start
8、//添加mysql
命令到/usr/local/bin目录
echo "
export.html' target='_blank'>
export PATH=/usr/local/mysql/bin:$PATH" >>/etc/profile
source /etc/profile
9、//添加libmysqlclient.so.15动态链接库到/usr/lib
ln -s /usr/local/mysql/lib/libmysqlclient.so.15 /usr/lib
10、更改mysql root 密码
use mysql
up
date user
set Password=password('newpassword') where User='root';
flush privileges;
三 编译安装PHP(FastCGI模式)
1、
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-mysql=/usr/local/mysql \
--with-iconv-dir=/usr/local \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir \
--enable-xml \
--disable-debug \
--disable-rpath \
--enable-discard-path \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--with-gd \
--with-curlwrappers \
--enable-mbregex \
--enable-fastcgi \
--enable-force-cgi-redirect \
--enable-mbs
tring \
--with-mcrypt \
--enable-ftp
php5.3.3以后的版本源码不需要再打php-fpm补丁,该补丁已集成进php5.3.3,
在编译时,不需再–enable-fastcgi了,在php5.3.3中强制启用fastcgi了。
在X86_64位上时,编译有问题,需要去掉下面两个扩展:--with-curl --with-curlwrappers
sed -i 's#-lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt#& -liconv#' Makefile
必须,否则报错:
collect2: ld returned 1 exit status
make: *** [sapi/cgi/php-cgi] Error 1
make
make install
2、cp php.ini-recommended /usr/local/php/etc/php.ini
3、编译安装PHP5扩展模块
wget http://pecl.php.net/get/memcache-2.2.5.tgz
tar zxvf 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
4、修改php.ini文件
sed -i 's#extension_dir = "./"#extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"\nextension = "memcache.so"\n#' /usr/local/php/etc/php.ini
6、
关于php的404错误,查看是否打开了php.ini的下面的参数
cgi.fix_pathinfo=0
该参数用于是否使用完整路径
四 fastcgi
要在nginx上跑php,首先需要启动fastcgi,方法有三种,一是用php自带的fastcgi server,二是用lighttpd带的spawn-fcgi,三是用php-fpm。
我使用的是spawn-fcgi
1、一些相关的rpm包
yum install b
zip2*
yum install pcre-devel
2、获得spawn-fcgi,spawn-fcgi现在被分离出来,做为一个新的项目
http://redmine.lighttpd.net/projects/spawn-fcgi/news
wget http://www.lighttpd.net/download/spawn-fcgi-1.6.1.tar.gz
tar -xvzf spawn-fcgi-1.6.1.tar.gz
./configure
make
make install
/usr/local/bin/spawn-fcgi -h
3、创建www用户和组,以及其使用的目录:
groupadd www -g 48
useradd -u 48 -g www www
mkdir -p /EBS/www
chmod +w /EBS/www
chown -R www:www /EBS/www
4、启动php-cgi进程,监听127.0.0.1的10080端口,进程数为64(如果服务器内存小于3GB,可以只开启25个进程),脚本:
#! /bin/bash
address="127.0.0.1"
port="9000"
pidpath="/tmp/spawn_phpcgi_${port}.pid"
user="www"
group="www"
phpcgi="/usr/local/php/bin/php-cgi"
PHP_FCGI_CHILDREN=25
PHP_FCGI_MAX_REQUESTS=1000
echo_ok ()
{
echo -ne "\033[33C ["
echo -ne "\033[32m"
echo -ne "\033[1C OK"
echo -ne "\033[39m"
echo -ne "\033[1C ]\n"
}
start_spawn()
{
env - PHP_FCGI_CHILDREN=${PHP_FCGI_CHILDREN} PHP_FCGI_MAX_REQUESTS=${PHP_FCGI_MAX_REQUESTS} /usr/local/bin/spawn-fcgi -a ${a
ddress} -p ${port} -u ${user} -g ${group} -f ${phpcgi} -P ${pidpath} 1>/dev/null
echo -ne "php-cgi start successfull"
echo_ok
}
case "$1" in
start)
if [ ! -f $pidpath ]
then
start_spawn
else
pidcount=`ps -ef |grep ${phpcgi}|wc -l`
if [ "$pidcount" -gt "1" ]
then
echo -ne "php-cgi already running "
echo_ok
else
rm -f $pidpath
start_spawn
fi
fi
;;
stop)
pid=`cat ${pidpath} 2>/dev/null`
kill ${pid} 2>/dev/null
rm -f ${pidpath} 2>/dev/null
echo -ne "php-cgi stop successfull"
echo_ok
;;
*)
echo "Usage: $0 {start|stop]}"
exit 1
esac
exit
|
cp /usr/local/php/etc/php.ini /usr/local/php/bin/php.ini
注意:使用cgi时,读取的php.ini为与php-cgi程序在同一目录的php.ini
五、安装Nginx 0.6.36
1、echo
ulimit -HSn 51200 >>/etc/profile
source /etc/profile
tar -xvzf nginx-0.6.36.tar.gz
2
./configure --prefix=/usr/local/nginx \
--with-http_stub_status_module \
--without-poll_module \
--without-select_module \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_perl_module
make
make install
启动脚本
|
#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# this script create it by jackbillow at 2007.10.15.
# it is v.0.0.2 version.
# if you find any errors on this scripts,please contact jackbillow.
# and send mail to jackbillow at gmail dot com.
#
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
# It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /usr/local/nginx/logs/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/var/run/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
echo -n $"Starting $prog: "
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}
# Stop nginx daemons functions.
stop() {
echo -n $"Stopping $prog: "
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid
}
# reload nginx service functions.
reload() {
echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
killproc $nginxd -HUP
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $RETVAL
|
3、编辑相关配置文件
(1).nginx配置文件
vi /usr/local/nginx/conf/nginx.conf
|
user www www;
worker_processes 10;
error_log logs/error.log notice;
pid logs/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 51200;
}
http
{
include mime.types;
default_type application/octet-stream;
charset gb2312;
server_names_hash_bucket_size 128;
#sendfile on;
#tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/html application/xml;
server
{
listen 80;
server_name 192.168.1.2;
index index.html index.htm index.php;
root /EBS/www;
if (-d $request_filename)
{
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
location ~ .*\.php?$
{
include fcgi.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log logs/access.log access;
}
}
|
(2)、php cgi 配置文件
vi /usr/local/nginx/conf/fcgi.conf
注:nginx自带了一个配置文件,/usr/local/nginx/conf/fastcgi_params,该配置文件缺少红色字体的部分,会造成访问php文件时报404错误。
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;
|
六 相关Linux内核参数
vi /etc/sysctl.conf,添加:
|
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000 65000
|
使配置生效
sysctl -p