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的相关信息就说明配置成功了。
|