Nginx/Tengine核心配置参数

  • A+
所属分类:Nginx WEB技术

目前公司线上、UAT、开发测试环境使用的反向代理服务器是Tengine/2.1.1
(nginx/1.6.2),下面主要介绍下Tengine反向代理、负载均衡以及缓存功能在工作中的应用,本文只是记录大概配置,具体核心参数不做介绍。

简介

http://tengine.taobao.org/index_cn.html

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。

编译参数

[root@develop source-two]# /usr/local/nginx/sbin/nginx -V
Tengine version: Tengine/2.1.1 (nginx/1.6.2)
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
TLS SNI support enabled
configure arguments: --with-http_stub_status_module --with-http_upstream_check_module
loaded modules:

反向代理

前端通过nginx反向代理后端real server(tomcat)

图片

[root@develop source-two]# vim /usr/local/nginx/conf/vhosts/appbeidiao.vancloud.com.conf 
server {
         listen       80;
         server_name  appbeidiao.vancloud.com;
         location ^~ /WEB-INF {
           deny all;
         }
         location ^~ /vancloud-mobile {
            deny all;
         }
        ##tomcat-investigate
        location / {
          proxy_pass http://vancloud-tenant-web-1.3;
          proxy_set_header              Host    $http_host;
          proxy_set_header              X-Real-IP          $remote_addr;
          proxy_set_header              X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header   Cookie $http_cookie;
          client_max_body_size  30m;
        }
        error_page   403 500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

nginx缓存

图片、语音存储使用的是mongodb,为了减轻用户请求db的压力。在前端nginx加了一层缓存。

proxy_cache_path      /opt/proxy_temp levels=1:2 keys_zone=imgcache:100m inactive=30d max_size=50g;

        #vancloud-fs
        location ~ ^/(resource|upload)/ {
         root                   /opt/proxy_temp;
         set $flag 0;
         if (!-e $request_filename){
           proxy_pass http://vancloud-fs-1.3;
         }
           proxy_cache imgcache;
           proxy_cache_valid 200 304 301 302 30d;
           proxy_cache_valid any 1d;
           proxy_cache_key $host$uri$is_args$args;
          proxy_set_header              Host    $http_host;
          proxy_set_header              X-Real-IP          $remote_addr;
          proxy_set_header              X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header   Cookie $http_cookie;
          client_max_body_size  30m;
        }

负载均衡

nginx通过upstream实现负载均衡功能,配合Tengine的upstream cheak模块实现后端real server健康监测。

 upstream vancloud-oa-web-1.3 {         ip_hash;
         server 192.168.3.150:8083;
         server 192.168.3.151:8083;
         check interval=3000 rise=2 fall=5 timeout=1000 default_down=true type=http;
        }
#vancloud-oa-web-1.2
upstream vancloud-oa-web-1.2 {
         ip_hash;
         server 192.168.3.150:7083;
         server 192.168.3.151:7083;
         check interval=3000 rise=2 fall=5 timeout=1000 default_down=true type=http;
        }
 
        #vancloud-oa-web
        location / {
         if ($args !~* "apiversion") {
          proxy_pass http://vancloud-oa-web-1.3;
         }
         if ($args ~* "apiversion=1.0.3") {
          proxy_pass http://vancloud-oa-web-1.2;
         }
         if ($args ~* "apiversion=1.0.4") {
          proxy_pass http://vancloud-oa-web-1.3;
          }
          proxy_set_header              Host    $http_host;
          proxy_set_header              X-Real-IP          $remote_addr;
          proxy_set_header              X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header   Cookie $http_cookie;
          client_max_body_size  30m;
        }

注意:nginx反向代理,可以根据用户的user-agent、args参数判断,实现后端服务跳转。生产环境应用场景,由于ios每次更新app
store都有审核期,为实现多版本并存,通过传参apiversion的方式区分app版本。

proxy配置

[root@develop3 ~]# vim /usr/local/nginx/conf/vhosts/proxy.conf 
proxy_set_header              Host    $http_host;
proxy_set_header              X-Real-IP          $remote_addr;
proxy_set_header              X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header   Cookie $http_cookie;
client_max_body_size  30m;
client_body_buffer_size 256k;
proxy_connect_timeout 6000;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 64k;
proxy_buffers   32 32k;
proxy_busy_buffers_size 128k;
proxy_http_version 1.1;

nginx多重判断

比如反向代理要判断if elif else等,nginx是不支持这样写的。&&
||这些符号都不行。以下例子我想判断文件是否存在,并且判断版本。

          if ( !-e $request_filename && $args !~* "apiversion=1.0.3") {
           proxy_pass http://vancloud-fs-1.3;
          }

可以换成这种方式:

set $flag 0;
if (!-e $request_filename){
 set $flag "${flag}1";
}
if ($args !~* "apiversion=1.0.3"){
 set $flag "${flag}2";
}
if ($flag = "012"){
 echo "www.baidu.com";
}

nginx多重判断访问不同站点

         ##vancloud-assist
        location ~ ^/(assist)/ {
          set $version 1.0.3;
          if ($args ~ "apiversion=1.0.4")
          {
            set $version 1.0.4;
          }
          if ($args ~ "apiversion=1.0.3")
          {
            set $version 1.0.3;
          }
            root        /opt/source/vancloud-www/$version;
        }

rewrite规则

rewrite ^/vancloud-mobile/resource/(.*)$ http://app.vgsaas.com:90/vancloud-mobile/resource/$1 last;
rewrite ^/(.*)$ http://101.200.3.222:801/$1 permanent;

HTTPS配置、整合PHP、GZIP压缩

server 
{
         
         listen       80;
         server_name  liuyalei.top www.liuyalei.top;
         return   301 https://$server_name/$request_uri;
}

server {
        listen 443;
        server_name liuyalei.top www.liuyalei.top;
        ssl   on;
        ssl_certificate  /usr/local/nginx/conf/vhosts/ssl/fullchain.pem;
        ssl_certificate_key  /usr/local/nginx/conf/vhosts/ssl/privkey.pem;
        ssl_trusted_certificate /usr/local/nginx/conf/vhosts/ssl/chain.pem;
        ssl_session_timeout  5m;
        ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
        #启用TLS1.1、TLS1.2要求OpenSSL1.0.1及以上版本,若您的OpenSSL版本低于要求,请使用 
        ssl_protocols TLSv1;
        ssl_ciphers  HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;
        ssl_prefer_server_ciphers   on;
        
         location / {
            if (-f $request_filename/index.html){
               rewrite (.*) $1/index.html break;
            }
            
            if (-f $request_filename/index.php){
               rewrite (.*) $1/index.php;
            }
           
            if (!-f $request_filename){
               rewrite (.*) /index.php;
            }
            index index.html index.php;
            root /server/wordpress;
        }
        
         location ~ \.php$ {
            root    /server/wordpress;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include  /usr/local/nginx/conf/fastcgi_params;
        }

        #开启gzip
        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
        error_page 404 = https://liuyalei.top/index.php;

}

YaLei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: