2016-11-02 8 views
1

私はip_hash(スティッキーセッション)を使用していますが、ウェブ上でポータルにアクセスできるシナリオがあります。また、同じポータルでホストされているサポートモジュールもありますアップストリームは22ノードで負荷分散されていますNGINX:最小限の接続でスティッキーセッションを持つ方法

  1. 固定セッションにポータルを使用しているお客様は問題ありません。
  2. スティッキセッションが同じ外部パブリックIPを持つすべてのユーザーに対して同じノードを指すようにアップストリームを作成しているため、サポートセンターからログオンするユーザーのパフォーマンスに問題があります。

私は「ドン同時1000ユーザーワーキングフォーム・サポート・センターがあるので

マイコンフィグ外観は

upstream appserver{ 
    ip_hash; 
    server 192.168.0.x:3811; 
    server 192.168.0.x:3812; 
    server 192.168.0.x:3813; 
    server 192.168.0.x:3814; 
    server 192.168.0.x:3815; 
    server 192.168.0.y:3811; 
    server 192.168.0.y:3812; 
    server 192.168.0.y:3813; 
    server 192.168.0.y:3814; 
    server 192.168.0.y:3815; 
    ... 
    ... 
}  

server { 
    location "/support" { 
     allow ...; 
     deny all; 
     alias ...; 
     index index.html; 
    } 

    location/{ 
     proxy_pass   http://appserver; 
     proxy_cookie_path/"/; secure;"; 
     proxy_set_header X-IBanking "127.0.0.1"; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
     proxy_set_header X-NginX-Proxy true; 
     proxy_set_header X-Request-Id $txid; 
     add_header X-Frame-Options "SAMEORIGIN"; 
     add_header Strict-Transport-Security max-age=15552000; 
     proxy_http_version 1.1; 
     proxy_redirect off; 
    } 

    gzip on; 
    gzip_comp_level 2; 
    gzip_proxied any; 
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript; 
    gzip_buffers 16 8k; 
    gzip_vary on; 
} 
+0

ここにあなたの設定を投稿できますか?ポータルとサポートモジュールの両方が同じ上流に定義されているか、別々の上流に定義されていますか?私はこれについてほとんど知識がありませんが、別々に設定されていると私には思えますが、ip-hashは別々のものになります。同じアップストリームで設定すると、すべてのサーバに均等に分散させることができます。あるいは、スティッキセッションを無視して、インスタンス間のセッションを処理する共通のRedisサーバを設定してください。 –

+0

@Stian、私はconfigで更新しました。私は同じ上流を使用しており、セッションを無視することはできません。 koa.js(node.js)と非粘着セッションを作るための解決策があれば、サンプルを提供してください –

答えて

1

が好き、私も彼らのために負荷を分散したいポイント2に関するヘルプが必要ですnginxだけで可能だと思う。 私はredisでkoa-generic-sessionを使用しています。このようにして、すべてのノードがセッション値を読み書きするためにredisに接続し、そのサーバーがRedisサーバーに接続されている限り、ユーザーはすべてのアップストリームサーバーに従います。

この例では、これは私が現在multible上流環境でのセッションのために使用しているものですhttps://github.com/koajs/generic-session

var session = require('koa-generic-session'); 
var redisStore = require('koa-redis'); 
var koa = require('koa'); 

var app = koa(); 
app.keys = ['keys', 'keykeys']; 
app.use(session({ 
    store: redisStore() 
})); 

app.use(function *() { 
    switch (this.path) { 
    case '/get': 
    get.call(this); 
    break; 
    case '/remove': 
    remove.call(this); 
    break; 
    case '/regenerate': 
    yield regenerate.call(this); 
    break; 
    } 
}); 

function get() { 
    var session = this.session; 
    session.count = session.count || 0; 
    session.count++; 
    this.body = session.count; 
} 

function remove() { 
    this.session = null; 
    this.body = 0; 
} 

function *regenerate() { 
    get.call(this); 
    yield this.regenerateSession(); 
    get.call(this); 
} 

app.listen(8080); 

から取られています。

+0

私は同じものを使用しており、セッションIDをDBに保存できますが、セッションには許可されたページ、 userIdや他のものは現在1つのインスタンスに飛んでいる、私もこれらを保存し、共有する必要があります –

+0

私はセッションストアに複数の値を格納する...問題なく私のために働く... –

+0

セッションストアブラウザセッションを意味しますか? nginxリバースプロキシの背後にある複数のノードインスタンス間でセッションデータ(セッションIDだけでなく)を共有する必要があります。 –

関連する問題