几条Nginx配置小技巧

多台app server的反向代理

upstream prod {
      server 192.168.1.1:6001;
      server 192.168.1.2:6001 backup;
    }

一般一个web app的部署方式,好比rails app就是启动一个unicorn开多个worker,或者用PUMA等多线程的server。这样来充分利用服务器资源,不过一旦这台服务器挂了,有个backup server即是极好的。可是backup server可能性能不是很好,或者仅仅是从别的用途的服务器上挤出来一点资源作backup server, 第二行的backup就是让upstream永远把他当备胎。css

Nginx串接作A/B Test

用Nginx串一个Tengine能够实现一个简单的A/B Test方案,Tengine完成规则划分,要写一些lua代码(不须要全部流量都要走Tengine匹配规则)。html

  • 最上层的Nginx配置中全部的请求都要带有host信息,一般状况静态资源的配置像这样android

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
      expires 30d;
      add_header Cache-Control public;
      proxy_pass http://prod;
     }

可是串接时必须在里面再加上proxy_set_header Host $http_host;不然静态文件访问不到web

  • 最上层的Nginx中要在upstream中配置redis

upstream prod {
      server tengine_host:80;
      server 192.168.1.1:6001 backup;
    }

即便tengine挂掉也不会影响app正常work浏览器

  • Tengine redis保存A/B Test规则,用lua-resty-redis获取规则服务器

  • 用lua解析匹配web app设置的用于A/B Test规则的cookie或者url,并proxy到不一样的upstreamcookie

upstream prod_in_beijing {
      server 192.168.1.1:6001;
      server 192.168.1.2:6001 backup;
    }
    upstream prod_in_usa {
      server 192.168.1.1:6002;
      server 192.168.1.2:6002 backup;
    }

解决串帐号问题

之前常常碰到登陆论坛时,登陆后的资料是别人的,彻底是用另一个账号登陆的效果,也就是串账号了。
相关blog
http://blog.isc2.org/isc2_blo...session

简单描述问题缘由多线程

  • 浏览器到app server中间不少地方是有cache的,尤为是静态资源

  • 静态文件的header中若是Cache-Control是public且带有cookie信息,这个文件会被cache住而后分发给全部请求相同文件名的用户

  • rails等的cookie based session或者各类session id的cookie会共享给其余其余用户,也就形成了串号

解决方法
添加 proxy_hide_header Set-Cookie;到静态资源配置如location ~* .(js|css|png|jpg|jpeg|gif|ico)$ {

让android下载APK时自动安装

其实就是让移动浏览器认识app安装包

  • 添加 application/vnd.android.package-archive     apk;到mime.types配置文件

  • 在站点配置(server {)中添加

location ~* \.(apk)$ {
       add_header Content-Type application/vnd.android.package-archive;
       proxy_pass http://prod;
     }
相关文章
相关标签/搜索