中文维基百科建站系统-HDwiki爱好者

当前位置: 主页 > Web技术 >

gentoo下搭建基于nginx的php高性能web服务器

时间:2011-06-12 21:28来源:未知 作者:world7th 点击:

nginx(发音同engine x)是一款俄罗斯的程式设计师Igor Sysoev所开发轻量级的网页服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器,并在BSD-like协议下发行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系统中运行。软件起初是由俄罗斯的程式设计师Igor Sysoev所开发并供俄国大型的入口网站及搜寻引擎Rambler(俄文:Рамблер)使用。nginx相较于Apache,lighttpd具有占有内存少,稳定性高等优势,并且依靠并发能力强,丰富的模块库以及友好灵活的配置而闻名。

本文以一个干净的gentoo环境为例讲述怎样搭建一个基于nginx的php高性能服务器。

一配置nginx+fastcgi+php

nginx只支持以fastcgi模式加载php,首先定义use变量到/etc/portage/package.use

echo www-servers/nginx fastcgi >> /etc/portage/package.use
echo dev-lang/php -apache2 -threads gd force-cgi-redirect cgi >> /etc/portage/package.use
(注:-apache2和-threads分别表示不安装apache2和去掉多线程支持)

然后运行emerge安装nginx和php

emerge -av nginx php

配置nginx参数

vi /etc/nginx/nginx.conf

一个简单的php配置文件如下,你可以根据需要再做相关优化

user nginx nginx;
worker_processes 2;
error_log /var/log/nginx/error_log info;

events {
 worker_connections  1024;
 use epoll;
}

http {
 include  /etc/nginx/mime.types;
 include  /etc/nginx/fastcgi_params;
 default_type application/octet-stream;

 log_format main
  '$remote_addr - $remote_user [$time_local] '
         '"$request" $status $bytes_sent '
  '"$http_referer" "$http_user_agent" '
  '"$gzip_ratio"';
               
 client_header_timeout 10m;
 client_body_timeout 10m;
 send_timeout  10m;

 connection_pool_size  256;
 client_header_buffer_size 1k;
 large_client_header_buffers 4 2k;
 request_pool_size  4k;

 gzip on;
 gzip_min_length 1100;
 gzip_buffers 4 8k;
 gzip_types text/plain;

 output_buffers 1 32k;
 postpone_output 1460;

 sendfile on;
 tcp_nopush on;
 tcp_nodelay on;

 keepalive_timeout 75 20;

 ignore_invalid_headers on;

 server {
  listen  80;
 
  root  /var/www/yoursite;
 
  index  index.html index.htm index.php;

  location ~ \.php$ {
   fastcgi_pass 127.0.0.1:9000;
   }
 }

mime.types文件一般不需要再配置,你可以根据需要加入或删除文件类型。
fastcgi_params需要做细微的调整。
fastcgi_params文件内容如下:

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  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 -t

如果出现如下信息
the configuration file /etc/nginx/nginx.conf syntax is ok
configuration file /etc/nginx/nginx.conf test is successful
就表示参数配置是正确的。

接下来配置fastcgi以支持php的运行
vi /etc/init.d/php-fcgi

输入如下内容:
#!/sbin/runscript
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

BIND=127.0.0.1:9000
USER=nginx
PHP_FCGI_CHILDREN=15
PHP_FCGI_MAX_REQUESTS=1000
PHP_CGI=/usr/bin/php-cgi
PHP_CGI_NAME=`basename $PHP_CGI`
PHP_CGI_ARGS="- USER=$USER PATH=/usr/bin PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS $PHP_CGI -b $BIND"

depend() {
 use logger
 need net
}

start() {
 echo -n "Starting PHP FastCGI: "
 start-stop-daemon --quiet --start --background --chuid "$USER" --exec /usr/bin/env -- $PHP_CGI_ARGS
 echo "$PHP_CGI_NAME."
}

stop() {
 echo -n "Stopping PHP FastCGI: "
 killall -q -w -u $USER $PHP_CGI
 echo "$PHP_CGI_NAME."
}

写一个php测试文件phpinfo.php到/var/www/yoursite,内容如下:
<?
phpinfo();
?>

启动nginx服务器和php-cgi进程

/etc/init.d/nginx start
/etc/init.d/php-fcgi start
加入开机启动

rc-update add nginx default
rc-update add php-fcgi default

在浏览器中输入http://192.168.1.2/phpinfo.php如果出现php的信息就说明配置成功了

 

二 配置eaccelerator+zend optimizer+memcache

1.gentoo下安装和配置eaccelerator:

echo dev-php5/eaccelerator >> /etc/portage/package.keywords
echo dev-php5/eaccelerator -apache2 >> /etc/portage/package.use
emerge -av eaccelerator

这时安装还不能成功,做如下一步

vi /etc/env.d/99eaccelerator

加入环境变量
HTTPD_USER="nginx"
HTTPD_GROUP="nginx"
使环境变量生效

env-update && source /etc/profile

再次安装eaccelerator

emerge -av eaccelerator

eaccelerator配置文件在/etc/php/cgi-php5/ext/eaccelerator.ini
可以对配置文件进行细微调整,我们这里采用默认的配置。

2.gentoo下安装和配置zend optimizer
 

echo dev-php5/ZendOptimizer >> /etc/portage/package.keywords
emerge -av ZendOptimizer

会出现[ebuild F]错误,表示需要手动下载ZendOptimizer包,你可以在本站下载此包(分为32位版本和64位版本),也可以到官网免费下载此软件包(需要申请账户),然后放入/usr/portage/distfiles目录中,再执行

emerge -av ZendOptimizer
(注:如果安装php的时候开启多线程支持(threads),这里的安装可能会出现TS/ZendOptimizer.so does not exist的问题)

ZendOptimizer配置文件在/etc/php/cgi-php5/ext/ZendOptimizer.ini
可以对配置文件进行细微调整,我们这里采用默认的配置。

3.gentoo下安装和配置memcache

emerge -av memcached
vi /etc/conf.d/memcached

编辑配置文件,内容如下:

# Copyright 2003 Gentoo Technologies, Inc
# $Header: /var/cvsroot/gentoo-x86/net-misc/memcached/files/1.3.3/conf,v 1.1 2009/05/26 00:03:09 robbat2 Exp $
# memcached config file

MEMCACHED_BINARY="/usr/bin/memcached"

#Specify memory usage in megabytes (do not use letters)
#64MB is default
MEMUSAGE="64"           #设置内存大小

#User to run as
MEMCACHED_RUNAS="memcached"

#Specify maximum number of concurrent connections
#1024 is default
MAXCONN="1024"

#Listen for connections on what address?
# If this is empty, memcached will listen on 0.0.0.0
# be sure you have a firewall in place!
LISTENON="127.0.0.1"             #设置监听地址,采用127.0.0.1,安全性比较好

#Listen for connections on what port?
PORT="11211"

# Listen for UDP connecitons on what port? 0 means turn off UDP
UDPPORT="${PORT}"

#PID file location
# '-${PORT}.${CONF}.pid' will be appended to this!
# You do not normally need to change this.
PIDBASE="/var/run/memcached/memcached"

#Other Options
MISC_OPTS=""

然后安装php memcache扩展

emerge -av perl-memcache

编辑php.ini配置文件

vi /etc/php/cgi-php5/php.ini

增加如下两行
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"
并做如下修改
output_buffering = Off -> output_buffering = On

启动memcached并加入开机启动

/etc/init.d/memcached start
rc-update add memcached default

这样eaccelerator+zend optimizer+memcache就配置好了,然后重启php-fcgi使配置生效

/etc/init.d/php-fcgi restart

(注意:如果配置无法生效,就尝试重启服务器使配置生效(命令为reboot))

在浏览器中输入http://192.168.1.2/phpinfo.php如果出现eaccelerator,zend optimizer以及memcache的相关信息就说明配置成功了。
 

------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
推荐内容
  • xml概述

     1996年,万维网联盟(W3C)开始设计一种可扩展的标记语言,使其能够将SGML的灵活性和强大功能与已经被广泛采用的HTML结合起来,经过W3C开发人员的努力...

  • 利用ffmpeg在linux下将mp3文件转换为wma

    现在网络朝宽带网发展越来越快了,但服务器托管环境要变化还是要很多的¥,所以能节省一分就是一分。在网络上音频文件通常使用mp3格式存储,mp3格式音质可以压得比较...

  • nginx支持手机应用(mobile)相关

    nginx支持手机应用的一些配置...

  • F5负载均衡器简明配置手册

    负载均衡器通常称为四层交换机或七层交换机。四层交换机主要分析IP层及TCP/UDP层,实现四层流量负载均衡。七层交换机除了支持四层负载均衡以外,还有分析应用层的...

  • HTTP协议详解

    HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展...

  • 分布式数据库拆表拆库的常用策略

    在大容量,高负荷的web系统中,对数据库进行一系列拆分,可有效提升数据库容量和性能。在初学程序的早期,程序员通常都喜欢按传统数据库设计模式,设计为单库和单一功能...