关于nginx,你不可不知的几大特色功能

nginx,轻量级的http服务与反向代理服务器软件,由于其并发能力较强,并且体积很小,所以被称为轻量级http服务软件。

nginx的特色功能有:

(1).URL rewriteURL重写

(2).reverse proxy:反向代理

(3). 做缓存服务器

(4). 实现对web服务的负载均衡

(5). 安装第三方插件,实现健康状态监测

(6).其他功能(这里不一一列举了)

本实验示意图如下:

说明:本实验是在虚拟机环境下实验,所需要3台虚拟linux主机,分别为:

nginx    172.16.22.1

web1        172.16.22.2

web2        172.16.22.2

前提:

配置好yum源,具体配置过程请看:http://lihuan.blog.51cto.com/4391550/800845,这里不再赘述。

web1web2上:

# yum install httpd –y

windows下:

C:\Windows\System32\drivers\etc,修改hosts文件,增加如下三行:

172.16.22.1 www.lihuan.com

172.16.22.2  www.lh.com

172.16.22.3     www.lhlh.com

具体实验配置过程(nginx)

所需软件包如下:

nginx-1.0.14.tar.gz 

下载地址:http://www.nginx.org/

healthcheck_nginx_upstreams.zip  

下载地址:https://github.com/cep21/healthcheck_nginx_upstreams

这里默认软件包下载到/root

1.安装nginx并打入健康状态监测补丁

  1. # yum groupinstall "Development Tools" –y 
  2. # yum groupinstall "Development Libraries" –y 
  3. # yum install pcre-devel –y 
  4. # groupadd -r nginx 
  5. # useradd -r -g nginx -s /bin/false -M nginx 
  6. # tar xvf nginx-1.0.14.tar.gz 
  7. # unzip healthcheck_nginx_upstreams.zip 
  8. # cd nginx-1.0.14 
  9. # patch -p1 < /root/cep21-healthcheck_nginx_upstreams-16d6ae7/nginx.patch 
  10. # ./configure \ 
  11.   --prefix=/usr \ 
  12.   --sbin-path=/usr/sbin/nginx \ 
  13.   --conf-path=/etc/nginx/nginx.conf \ 
  14.   --error-log-path=/var/log/nginx/error.log \ 
  15.   --http-log-path=/var/log/nginx/access.log \ 
  16.   --pid-path=/var/run/nginx/nginx.pid  \ 
  17.   --lock-path=/var/lock/nginx.lock \ 
  18.   --user=nginx \ 
  19.   --group=nginx \ 
  20.   --with-http_ssl_module \ 
  21.   --with-http_flv_module \ 
  22.   --with-http_stub_status_module \ 
  23.   --with-http_gzip_static_module \ 
  24.   --http-client-body-temp-path=/var/tmp/nginx/client/ \ 
  25.   --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ 
  26.   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ 
  27.   --with-pcre \ 
  28.   --add-module= /root/cep21-healthcheck_nginx_upstreams-16d6ae7 
  29. # make && make install 

nginx提供服务脚本:

  1. # vim /etc/rc.d/init.d/nginx 
  2. #!/bin/sh 
  3. # nginx - this script starts and stops the nginx daemon 
  4. # chkconfig:   - 85 15 
  5. # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \ 
  6. #               proxy and IMAP/POP3 proxy server 
  7. # processname: nginx 
  8. # config:      /etc/nginx/nginx.conf 
  9. # config:      /etc/sysconfig/nginx 
  10. # pidfile:     /var/run/nginx.pid 
  11.   
  12. # Source function library. 
  13.  /etc/rc.d/init.d/functions 
  14.  
  15.   
  16.  
  17. # Source networking configuration. 
  18.  
  19. . /etc/sysconfig/network 
  20.  
  21. # Check that networking is up. 
  22. [ "$NETWORKING" = "no" ] && exit 0 
  23.  
  24. nginx="/usr/sbin/nginx" 
  25. prog=$(basename $nginx) 
  26.   
  27. NGINX_CONF_FILE="/etc/nginx/nginx.conf" 
  28.  
  29. [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx 
  30.  
  31. lockfile=/var/lock/subsys/nginx 
  32.  
  33. make_dirs() { 
  34.    # make required directories 
  35.    user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` 
  36.    options=`$nginx -V 2>&1 | grep 'configure arguments:'` 
  37.    for opt in $options; do 
  38.        if [ `echo $opt | grep '.*-temp-path'` ]; then 
  39.            value=`echo $opt | cut -d "=" -f 2` 
  40.            if [ ! -d "$value" ]; then 
  41.                # echo "creating" $value 
  42.                mkdir -p $value && chown -R $user $value 
  43.            fi 
  44.        fi 
  45.    done 
  46.   
  47. start() { 
  48.     [ -x $nginx ] || exit 5 
  49.     [ -f $NGINX_CONF_FILE ] || exit 6 
  50.     make_dirs 
  51.     echo -n $"Starting $prog: " 
  52.     daemon $nginx -c $NGINX_CONF_FILE 
  53.     retval=$? 
  54.     echo 
  55.     [ $retval -eq 0 ] && touch $lockfile 
  56.     return $retval 
  57.   
  58. stop() { 
  59.     echo -n $"Stopping $prog: " 
  60.     killproc $prog -QUIT 
  61.     retval=$? 
  62.     echo 
  63.     [ $retval -eq 0 ] && rm -f $lockfile 
  64.     return $retval 
  65. }  
  66.  
  67. restart() { 
  68.     configtest || return $? 
  69.     stop 
  70.     sleep 1 
  71.     start 
  72.   
  73. reload() { 
  74.     configtest || return $? 
  75.     echo -n $"Reloading $prog: " 
  76.     killproc $nginx -HUP 
  77.     RETVAL=$? 
  78.     echo 
  79.   
  80. force_reload() { 
  81.     restart 
  82.   
  83. configtest() { 
  84.   $nginx -t -c $NGINX_CONF_FILE 
  85.   
  86. rh_status() { 
  87.     status $prog 
  88. }  
  89.  
  90. rh_status_q() { 
  91.     rh_status >/dev/null 2>&1 
  92.   
  93. case "$1" in 
  94.     start) 
  95.         rh_status_q && exit 0 
  96.         $1 
  97.         ;; 
  98.     stop) 
  99.         rh_status_q || exit 0 
  100.         $1 
  101.         ;; 
  102.     restart|configtest) 
  103.         $1 
  104.         ;; 
  105.     reload) 
  106.         rh_status_q || exit 7 
  107.         $1 
  108.         ;; 
  109.     force-reload) 
  110.         force_reload 
  111.         ;; 
  112.     status) 
  113.         rh_status 
  114.         ;; 
  115.     condrestart|try-restart) 
  116.         rh_status_q || exit 0 
  117.             ;; 
  118.     *) 
  119.         echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" 
  120.         exit 2 
  121. esac 

而后为此脚本赋予执行权限,添加至服务管理列表,并让其开机自动启动,在启动服务测试:

  1. # chmod +x /etc/rc.d/init.d/nginx 
  2. # chkconfig --add nginx 
  3. # chkconfig nginx on 
  4. # service nginx start 

2.实现nginx URL重写,实例域名跳转

  1. # vim /etc/nginx/nginx.conf  #实例如下 
  2. server { 
  3. listen 80; 
  4. server_name www.lihuan.com; 
  5. root html; 
  6. index index.html index.htm; 
  7. rewrite ^/ http://www.lh.com/; 
  8. # service nginx restart 

说明:在windows下当你访问http://www.lihuan.com/的时候,自动跳转到http://www.lh.com/的服务上了。

3.实现反向代理

  1. # vim /etc/nginx/nginx.conf 
  2. server { 
  3. listen 80; 
  4. server_name www.lihuan.com; 
  5. root html; 
  6. index index.html index.htm; 
  7. proxy_pass  http://www.lh.com; 
  8. # service nginx restart 

说明:当你访问www.lihuan.com的服务时,此时www.lihuan.com并没有提供web服务,而是反向代理到www.lh.comweb服务上了。

4.实现缓存服务器

  1. # vim /etc/nginx/nginx.conf 
  2. http { 
  3.     proxy_cache_path  /data/nginx/cache  levels=1:2    keys_zone=STATIC:10m    inactive=24h  max_size=1g
  4.     server { 
  5.        location / { 
  6.             proxy_pass             http:// www.lh.com; 
  7.             proxy_set_header       Host $host; 
  8.             proxy_cache            STATIC; 
  9.             proxy_cache_valid  200 302 10m; 
  10.             proxy_cache_valid  301 1h; 
  11.             proxy_cache_valid  any 1m; 
  12.             proxy_cache_use_stale  error timeout invalid_header updating 
  13.             http_500 http_502 http_503 http_504; 
  14.                            } 
  15. # service nginx restart 

说明:当你访问www.lihuan.com反向代理到www.lh.com的时候,明显比直接访问www.lh.com的速度快,这就是缓存服务的作用。

5.做负载均衡

  1. # vim /etc/nginx/nginx.conf 
  2. upstream loadbalance { 
  3.         server www.lh.com weight=5
  4.          server www.lhlh.com;     
  5. server { 
  6.         listen 80; 
  7.          server_name www.lihuan.com; 
  8.          location / { 
  9.                    include proxy.conf; 
  10.                   proxy_pass http:// loadbalance; 
  11.          } 
  12. # service nginx restart 

说明:在windows主机上当你访问www.lihuan.com的时候,刷新几次会是不同的页面,这就说明负载均衡实现了(如果想明确看到实验结果,可以让web1web2的页面不一样,但实际工作中,二者的web页面数据是完全一致的)

 6.实现健康状态监测

  1. # vim /etc/nginx/nginx.conf 
  2. http { 
  3.   upstream loadba { 
  4.     server 172.16.22.2:80; 
  5.     server 172.16.22.3:80; 
  6.     healthcheck_enabled; 
  7.     healthcheck_delay 1000; 
  8.     healthcheck_timeout 1000; 
  9.     healthcheck_failcount 1; 
  10.     healthcheck_send "GET /.health HTTP/1.0"; 
  11.                      } 
  12.   server { 
  13.     listen 80; 
  14.     location / { 
  15.       proxy_set_header Host $http_host; 
  16.       proxy_pass http://172.16.22.2; 
  17.       proxy_connect_timeout 3; 
  18.                  } 
  19.     location /stat { 
  20.       healthcheck_status; 
  21.                     } 
  22.                  } 
  23. # service nginx restart 

说明:当你在地址栏里输入:http://172.16.22.1/stat,即可看到web1web2 web服务的健康状况的。