幾條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;
     }
相關文章
相關標籤/搜索