利用Nginx替代apache实现高性能的Web环境.docx
- 文档编号:15397040
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:10
- 大小:22.05KB
利用Nginx替代apache实现高性能的Web环境.docx
《利用Nginx替代apache实现高性能的Web环境.docx》由会员分享,可在线阅读,更多相关《利用Nginx替代apache实现高性能的Web环境.docx(10页珍藏版)》请在冰点文库上搜索。
利用Nginx替代apache实现高性能的Web环境
利用Nginx替代apache实现高性能的Web环境
利用Nginx替代apache实现高性能的Web环境
Nginx介绍:
Nginx发音为[enginex],是由俄罗斯人IgorSysoev建立的工程,基于BSD许可。
据说他当初是F5的成员之一,英文主页:
。
俄罗斯的一些大网站已经使用它超过两年多了,一直表现非凡,相信想了解nginx的朋友都读过阿叶大哥的利用nginx实现负载均衡的文章相关链接见(六)。
测试环境:
红动中国(redocn)提供运营效劳器环境.
关于红动效劳环境:
红动中国在早期利用apache环境,再加上一些优化的工作,一直是相对很稳定,但是最近由于网站开展,访问量越来越大,在线人数一多经常出现,负载过高,性能急剧下降,经过双木站长的同意,考虑是否能利用nginx来代替apache,经过长时间的观察目前nginx工作很稳定,系统也不会再说现高负载的状况,占用内存也很低,访问速率从用户体验来看明显有提升.
关于红动中国:
红动中国〔redocn)论坛经过近1年的快速开展,目前日均页面访问量超过100万,位居全球设计论坛(中文)第1位,是国内最具影响力的设计论坛之一。
目前论坛拥有近20万会员,包括众多设计界领军人物在内的行业中坚力量、相关艺术院校师生以及局部设计爱好者等。
迁移目标:
实现网站论坛静态化,防盗链,下载并发数和速率限制,实现原站apache所具有的所有功能,将原apache环境下的站点全部迁移到Nginx
一.PHP(Fastcgi)编译安装
[root@attphp-5.2.4]#catin.sh./configure\
–prefix=/usr/local/php-fcgi\
–enable-fastcgi\
–enable-discard-path\
–enable-force-cgi-redirect\
–with-config-file-path=/usr/local/php-fcgi/etc\
–enable-zend-multibyte\
–with-mysql=/usr/local/mysql\
–with-libxml-dir=/usr/local/libxml2\
–with-gd=/usr/local/gd2\
–with-jpeg-dir\
–with-png-dir\
–with-bz2\
–with-freetype-dir\
–with-iconv-dir\
–with-zlib-dir\
–with-openssl=/usr/local/openssl\
–with-mcrypt=/usr/local/libmcrypt\
–enable-sysvsem\
–enable-inline-optimization\
–enable-soap\
–enable-gd-native-ttf\
–enable-ftp\
–enable-mbstring\
–enable-exif\
–disable-debug\
–disable-ipv6
make
makeinstall
cpphp.ini-dist/usr/local/php-fcgi/etc/php.ini
复制代码注:
关于如何安装gd库,mysql的编译安装,本文将不介绍,本文重点在于介绍nginx的安装与配置,如想了解其它相关的问题可以到
LinuxPk去找相关的贴子()
二.Nginx编译安装
1.创立nginx运行用户和虚拟主机目录groupaddwww-g48
useradd-u48-gwwwwww
mkdir-p/data/www/wwwroot
chown-Rwww:
www/data/www/wwwroot
复制代码2.安装ligd中附带的spawn-fcgi,用来启动php-cgi
先编译安装ligd产生spawn-fcgi二进制文件.cd/usr/local/src/ligd-1.4.18
cpsrc/spawn-fcgi/usr/local/php-fcgi/bin/
复制代码启动php-cgi进程,监听127.0.0.1的8085端口,进程数为250〔如果效劳器内存小于3GB,可以只开启25个进程〕,用户为www:
/usr/local/php-fcgi/bin/spawn-fcgi-a127.0.0.1-p8085-C250-uwww-f/usr/local/php-fcgi/bin/php-cgi
3.nginx的安装与配置
安装Nginx所需的pcre库:
tarzxvfpcre-7.2.tar.gz
cdpcre-7.2/
./configure
make&&makeinstall
cd../
tarzxvfnginx-0.5.32.tar.gz
cdnginx-0.5.32
./configure–user=www–group=www–prefix=/usr/local/nginx/–with-_stub_status_module–with-
openssl=/usr/local/openssl
make&&makeinstall
复制代码此模块非核心模块,需要在编译的时候手动添加编译参数–with-_stub_status_module
配置nginx
三.Nginx主配置文件及PHP支持.
1.nginx.conf主配置文件的配置
#cd/usr/local/nginx/conf/
#cpnginx.confnginx.conf.cao
#cat/dev/null>nginx.conf
#vinginx.conf//主配置文件userwwwwww;
worker_processes10;
#error_loglogs/error.log;
#error_loglogs/error.lognotice;
#error_loglogs/error.loginfo;
pid/var/run/nginx.pid;
#Specifiesthevalueformaximumfiledescriptorsthatcanbeopenedbythisprocess.
worker_rlimit_nofile51200;
events
{
useepoll;
#maxclient=worker_processes*worker_connections/cpu_number
worker_connections51200;
}
{
includeconf/mime.types;
default_typeapplication/octet-stream;
log_formatmain‘$remote_addr-$remote_user[$time_local]$request‘
‘"$status"$body_bytes_sent"$_referer"‘
‘"$_user_agent""$_x_forwarded_for"’;
#access_log/data/www/logs/access.logmain;
#sendfileon;
tcp_nopushon;
tcp_nodelayoff;
keepalive_timeout60;
client_header_timeout3m;
client_body_timeout3m;
send_timeout3m;
connection_pool_size256;
client_header_buffer_size1k;
large_client_header_buffers42k;
request_pool_size4k;
output_buffers432k;
postpone_output1460;
client_max_body_size10m;
client_body_buffer_size256k;
client_body_temp_path/dev/shm/client_body_temp;
proxy_temp_path/usr/local/nginx/proxy_temp;
fastcgi_temp_path/usr/local/nginx/fastcgi_temp;
#gzip
gzipon;
gzip__version1.0;
gzip_comp_level2;
gzip_proxiedany;
gzip_typestext/plaintext/htmltext/cssapplication/x-javascripttext/xmlapplication/xmlapplication/xmlrsstext/javascript;
gzip_min_length1100;
gzip_buffers48k;
#Thefollowingincludesarespecifiedforvirtualhosts//以下是加载虚拟主机配置.
#
includeconf/vhosts/www_redocn_com.conf;
#bbs.redocn
includeconf/vhosts/bbs_redocn_com.conf;
#blog.redocn
includeconf/vhosts/blog_redocn_com.conf;
#down.redocn
includeconf/vhosts/down_redocn_com.conf;
}
复制代码2.配置支持Fastcgi模式的PHP
[root@redocnconf]#catenable_php5.conffastcgi_pass127.0.0.1:
8085;
fastcgi_indexindex.php;
fastcgi_paramGATEWAY_INTERFACECGI/1.1;
fastcgi_paramSERVER_SOFTWAREnginx;
#newacupload
#fastcgi_pass_request_bodyoff;
#client_body_in_file_onlyclean;
#fastcgi_paramREQUEST_BODY_FILE$request_body_file;
#
fastcgi_paramQUERY_STRING$query_string;
fastcgi_paramREQUEST_METHOD$request_method;
fastcgi_paramCONTENT_TYPE$content_type;
fastcgi_paramCONTENT_LENGTH$content_length;
fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;
fastcgi_paramSCRIPT_NAME$fastcgi_script_name;
fastcgi_paramREQUEST_URI$request_uri;
fastcgi_paramDOCUMENT_URI$document_uri;
fastcgi_paramDOCUMENT_ROOT$document_root;
fastcgi_paramSERVER_PROTOCOL$server_protocol;
fastcgi_paramREMOTE_ADDR$remote_addr;
fastcgi_paramREMOTE_PORT$remote_port;
fastcgi_paramSERVER_ADDR$server_addr;
fastcgi_paramSERVER_PORT$server_port;
fastcgi_paramSERVER_NAME$server_name;
#PHPonly,requiredifPHPwasbuiltwith–enable-force-cgi-redirect
fastcgi_paramREDIRECT_STATUS200;
复制代码四,多虚拟主机应用配置案例.
#mkdir/usr/local/nginx/conf/vhosts//建立虚拟主机配置存放目录.
1.redocn//首站配置
[root@redocnvhosts]#viwww_redocn_com.confserver
{
listen80;
server_nameredocn;
indexindex.htmlindex.htmindex.php;
root/data/www/wwwroot;
error_page404;
rewrite^/bbs/(.*)$1;
location~.*\.php?
$
{
includeconf/enable_php5.conf;
}
}
复制代码注:
关于rewite需求,红动中国希望当用户访问的时候自动转至
在原apache中利用redirect实现
Redirect/bbs
本文中在nginx下利用rewrite实现:
rewrite^/bbs/(.*)majia.redocnwt.redocn;
indexindex.htmlindex.htmindex.php;
root/home/www/htdocs/bbs;
access_log/var/log/nginx/access_bbs.redocn.logcombined;
location/{
#bbsrewrite
rewrite^/archiver/((fid|tid)-[\w\-]\.html)$/archiver/index.php?
$1last;
rewrite^/forum-([0-9])-([0-9])\.html$/forumdisplay.php?
fid=$1&page=$2last;
rewrite^/thread-([0-9])-([0-9])-([0-9])\.html$/viewthread.php?
tid=$1&extra=page\=$3&page=$2last;
rewrite^/space-(username|uid)-(.)\.html$/space.php?
$1=$2last;
rewrite^/tag-(.)\.html$/tag.php?
name=$1last;
break;
#error
error_page404/index.php;
#redirectservererrorpagestothestaticpage/50x.html
error_page500502503504/50x.html;
location=/50x.html{
roothtml;
}
}
#Preventinghotlinkingofimagesandotherfiletypes
location~*^.\.(gif|jpg|png|swf|flv|rar|zip)${
valid_referersnoneblockedserver_names
*.redocnredocn*.taobaotaobao
bbs.blueideabbs.asiacibbs.arting365forum.chinavisualsoftbbs.pconline
bbs.chinaddubbs.photops*.baidu*.google*.google*.soso*.yahoo
*.yahoo;
if($invalid_referer){
rewrite^/;
#return403;
}
}
#supportphp
location~.*\.php?
$
{
includeconf/enable_php5.conf;
}
}
复制代码注:
1.红动中国采用高性能的Discuz!
论坛,原apache的rewrite规那么几乎不要做什么修改即可全部移植到nginx下.
静态化配置见面上面的:
#bbsrewrite局部.
2.一般论坛都希望实现防盗链功能,在apache很轻松实现?
在nginx下是否容易实现呢?
答案是肯定的.#Preventinghotlinkingofimagesandotherfiletypes
valid_referersnoneblockedserver_names*.redocnredocn…你允许连接的网址;
if($invalid_referer){
rewrite^/;//让别人盗链时显示你指定的图片.
#return403;
}
复制代码3.blog.redocn
[root@redocnvhosts]#viblog_redocn_com.confserver
{
listen80;
server_nameblog.redocn;
indexindex.htmlindex.htmindex.php;
root/data/www/wwwroot/blog;
error_page404;
#supsiterewrite
rewrite^([0-9])/spacelist(.*)$index.php?
$1/action_spacelist$2;
rewrite^([0-9])/viewspace_(.)$index.php?
$1/action_viewspace_itemid_$2;
rewrite^([0-9])/viewbbs_(.)$index.php?
$1/action_viewbbs_tid_$2;
rewrite^([0-9])/(.*)$index.php?
$1/$2;
rewrite^([0-9])$index.php?
$1;
rewrite^action_(.)$index.php?
action_$1;
rewrite^category_(.)$index.php?
action_category_catid_$1;
rewrite^itemlist_(.)$index.php?
action_itemlist_catid_$1;
rewrite^viewnews_(.)$index.php?
action_viewnews_itemid_$1;
rewrite^viewthread_(.)$index.php?
action_viewthread_tid_$1;
rewrite^index([\.a-zA-Z0-9]*)$index.php;
rewrite^html/([0-9])/viewnews_itemid_([0-9])\.html$index.php?
action_viewnews_itemid_$2;
rewrite^/([0-9])/spacelist(.)$/index.php?
uid/$1/action/spacelist/type$2;
rewrite^/([0-9])/viewspace(.)$/index.php?
uid/$1/action/viewspace/itemid$2;
rewrite^/([0-9])/viewbbs(.)$/index.php?
uid/$1/action/viewbbs/tid$2;
rewrite^/([0-9])/(.*)$/index.php?
uid/$1/$2;
rewrite^/([0-9])$/index.php?
uid/$1;
rewrite^/action(.)$/index.php?
action$1;
rewrite^/category(.)$/index.php?
action/category/catid$1;
rewrite^/viewnews(.)$/index.php?
action/viewnews/itemid$1;
rewrite^/viewthread(.)$/index.php?
action/viewthread/tid$1;
rewrite^/mygroup(.)$/index.php?
action/mygroup/gid$1;
location~.*\.php?
$
{
includeconf/enable_php5.conf;
}
}
复制代码注:
blog采用功能强大的Supesite作为Blog站点:
1.Blog如何在Nginx里实现静态化,具体设置见,上面的#supesiterewrite
4.down.redocn
[root@redocnvhosts]#vidown_redocn_com.conflimit_zoneone$binary_remote_addr10m;
server
{
listen80;
server_namedown.redocn;
indexindex.htmlindex.htmindex.php;
root/data/www/wwwroot/down;
error_page404/index.php;
#redirectservererrorpagestothestaticpage/50x.html
error_page500502503504/50x.html;
location=/50x.html{
roothtml;
}
#Zonelimit
location/{
limit_connone1;
limit_rate20k;
}
#servestaticfiles
location~^/(images|javasgi/bin/spawn-fcgi-a127.0.0.1-p8085-C250-uwww-f/usr/local/php-fcgi/bin/php-cgi
/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.conf
复制代码你可以把上面两条命令制做成系统启动效劳脚本,相关的脚本在网上也很多,本文就不再贴出来了,给出一个实例链接:
五.问题及经验总结:
1.安装Discuz论坛后,无法上传大于M以上的附件?
在主配置文件里参加:
client_max_body_size10m;详细指令说明请参见(六)提供的Wiki链接.
2.Discuz附件无法下载附件?
最近遇到一个奇怪的问题在nginx下discuz论坛无法下载附件,后来
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 Nginx 替代 apache 实现 性能 Web 环境