文章目录
  1. 1. 强大的负载均衡+静态文件WEB服务器nginx实战

强大的负载均衡+静态文件WEB服务器nginx实战

Nginx

强大的负载均衡+静态文件WEB服务器nginx实战

    
模块依赖:

1 gzip支持,需要zlib http://www.zlib.net/ 下载最新版即可

2 rewrite module requires pcre library http://www.pcre.org/ 下载最新版即可

3 ssl 功能需要 openssl 库 http://www.openssl.org/ => http://www.openssl.org/source/ LASTEST版本即可

 

安装过程:

#下载以上source到/usr/local/src/nginx/目录下,解压,则该目录下情况如下:

[root@s16 nginx]# ls

nginx-0.6.32  nginx-0.6.32.tar.gz  openssl-0.9.8i  openssl-0.9.8i.tar.gz  pcre-7.8  pcre-7.8.tar.gz  zlib-1.2.3  zlib-1.2.3.tar.gz

cd nginx-0.6.32

./configure –with-pcre=../pcre-7.8 –with-zlib=../zlib-1.2.3 –with-openssl=../openssl-0.9.8i

make

make install

 

#OK,安装完成

#修改配置:

cd /usr/local/nginx

vi conf/nginx.conf

#例如,去掉例子中的8000端口的服务器配置的注释

sbin/nginx -t -c conf/nginx.conf (测试配置文件是否正确)

[root@s16 nginx]# sbin/nginx -t -c conf/nginx.conf  

2008/09/17 15:26:55 [info] 15879#0: the configuration file conf/nginx.conf syntax is ok

2008/09/17 15:26:55 [info] 15879#0: the configuration file conf/nginx.conf was tested successfully

 

sbin/nginx  (启动)

ps aux | grep nginx | grep -v grep (查看是否正常启动了)

#如果没有正常启动,查看errorlog,默认位置:/usr/local/nginx/logs/error.log

 

#经过apache bench测试,nginx在serve静态文件方面性能不比apache(with mod_perl)好多少,基本上,以65K为分界点,小文件时nginx性能好(最高可以达到3倍左右速度),大文件时apache性能好(不过差别有限),所以纯从速度上来讲,nginx并不比apache强,不过nginx小巧,消耗资源少,如果你有很多静态小文件需要serve,的确是个不错的选择哦。

     这里推荐一种架构:

     1 前端nginx,并serve静态文件,如图片,js,css等,nginx是支持gzip压缩的

     2 后端动态程序用fastcgi(lighttpd的spawn_fcgi即可),可以支持php,perl等多种脚本语言了

 

     下面介绍一下nginx的常用配置:

1 静态文件用nginx直接serve:

Nginx代码  -356.png

1 #css|js|ico|gif|jpg|jpeg|png|txt|html|htm|xml|swf|wav这些都是静态文件,但应分辨,js、css可能经常会变,过期时间应小一些,图片、html基本不变,过期时间可以设长一些  

2 location ~* ^.+.(ico|gif|jpg|jpeg|png|html|htm)$ {  

3     root         /var/www/poseidon/root/static;  

4     access_log   off;  

5     expires      30d;  

6 }  

7 location ~* ^.+.(css|js|txt|xml|swf|wav)$ {  

8     root         /var/www/poseidon/root/static;  

9     access_log   off;  

10     expires      24h;  

11 }  

12 #注:location不包括?后面带的参数,所以以上正则可以匹配http://192.168.1.16/image/sxxx.jpg?a=xxx   

1 打开gzip,压缩传输 Nginx代码  %!(EXTRA markdown.ResourceType=, string=, string=)

1 gzip on;  

2 gzip_comp_level 7;  

3 gzip_min_length  1100; #需要压缩的最小长度  

4 gzip_buffers    4 8k;  

5 gzip_types      text/plain application/javascript text/css text/xml application/x-httpd-php; #指定需要压缩的文件类型  

6 output_buffers  1 32k;  

7 postpone_output  1460;  

2

 

1 查看nginx的状态 Nginx代码  %!(EXTRA markdown.ResourceType=, string=, string=)

1 #设定查看Nginx状态的地址(非默认安装模块,需要在编译时加上–with-http_stub_status_module)  

2 location /NginxStatus {  

3     stub_status            on;  

4     access_log             on;  

5     auth_basic             “NginxStatus”;  

6     auth_basic_user_file   /var/www/poseidon/root/passwd;  

7 }  

2

 

3 使用nginx的rewrite模块 Nginx代码  %!(EXTRA markdown.ResourceType=, string=, string=)

1 #强大的rewrite模块:  

2 #文档:http://wiki.[codemongers.com/NginxHttpRewriteModule](http://codemongers.com/NginxHttpRewriteModule)  

3 #经典示例:rewrites http://www.mydomain.nl/foo => http://mydomain.nl/foo  

4 if ($host ~* www.(.*)) {  

5   set $host_without_www $1;  

6   rewrite ^(.*)$ http://$host_without_www$1 permanent; # $1 contains ‘/foo’, not ‘www.mydomain.nl/foo‘  

7 }  

8   

9 #我们的应用:rewrites 所有非www.popovivi.com的访问 => http://www.popovivi.com/xxx  

10 if ($host != “www.popovivi.com“) {  

11     rewrite ^(.*)$ http://www.popovivi.com$1 permanent;  

12 }  

4

 

 

     最后,因为nginx没有方便的控制命令可用,经常要ps,kill等直接控制,比较麻烦,可以为它写一个启动脚本,例子如下:

Shell代码  %!(EXTRA markdown.ResourceType=, string=, string=)

1 #!/bin/sh  

2 #  

3 # description: Starts, stops nginx  

4 #  

5 #chkconfig: 2345 20 80  

6 #dscription: Startup script for nginx webserver on CentOS. Place in /etc/init.d   

7 #  

8 # Author: Touya  

9 set -e  

10   

11 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin  

12 DESC=”nginx daemon”  

13 NAME=nginx  

14 DAEMON=/usr/local/nginx/sbin/$NAME  

15 CONFIGFILE=/var/www/poseidon/root/nginx.conf  

16 PIDFILE=/var/run/$NAME.pid  

17 SCRIPTNAME=/etc/init.d/$NAME  

18   

19 # Gracefully exit if the package has been removed.  

20 test -x $DAEMON || exit 0  

21   

22 d_start() {  

23 echo “Starting $DESC: $NAME”  

24 $DAEMON -c $CONFIGFILE || echo “already running”  

25 }  

26   

27 d_stop() {  

28 echo “Stopping $DESC: $NAME”  

29 test -f $PIDFILE && kill -QUIT cat $PIDFILE  

30 }  

31   

32 d_reload() {  

33 echo “Reloading $DESC configuration…”  

34 kill -HUP cat $PIDFILE || echo “can’t reload”  

35 }  

36 case “$1” in  

37 ‘start’)  

38     d_start  

39     echo “started.”  

40 ;;  

41 ‘stop’)  

42     d_stop  

43     echo “stoped.”  

44 ;;  

45 ‘reload’)  

46     d_reload  

47     echo “reloaded.”  

48 ;;  

49 ‘restart’)  

50     echo “Restarting $DESC: $NAME …”  

51     d_stop  

52     # One second might not be time enough for a daemon to stop,  

53     # if this happens, d_start will fail (and dpkg will break if  

54     # the package is being upgraded). Change the timeout if needed  

55     # be, or change d_stop to have start-stop-daemon use –retry.  

56     # Notice that using –retry slows down the shutdown process somewhat.  

57     sleep 3  

58     d_start  

59     echo “done.”  

60 ;;  

61 ‘list’)  

62     ps auxf | egrep ‘(PID|nginx)’ | grep -v grep  

63 ;;  

64 ‘test’)  

65     $DAEMON -t -c $CONFIGFILE  

66 ;;  

67 *)  

68 echo “Usage: $SCRIPTNAME {reload|list|test|start|stop|restart}” >&2  

69 exit 3  

70 ;;  

71 esac  

72 exit 0  

保存文件,并chmod 755 /etc/init.d/nginx

用chkconfig –list nginx查看是否是一个可用后台启动服务,如果是的话,可以直接执行chkconfig –add nginx,这个后台服务搞定(代码中不可省略:#chkconfig: 2345 20 80)

接下可以用service nginx start|restart|stop来操作你的nginx服务器(restart时重新读入config)

文章目录
  1. 1. 强大的负载均衡+静态文件WEB服务器nginx实战