Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux集群 > Architecture > » 正文

[转]nginx+php(spawn-fcgi)

来源: yuanhsh 分享至:

转自: 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-shared 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.edu/mysql/ //添加用于启动MySQL的用户及用户组 groupadd 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: basedir=/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 update 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-mbstring \ --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 bzip2* 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

Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史