nginx + eval + memcached : check block id

API認証をどうしようかと
memcachedにブロックidを入れて、チェックしようと思います。

1. nginx でmemcachedからデータを取得
ng => 403
ok => 2

2. アプリケーションサーバーへ
idが正常 => データを返す + ログをfluentdへ流す => 3,
idが不正(桁数や簡単な法則チェックのみ) => memcachedへblockidとして登録。403を返す。

ipチェックもする

3. 正常時
fluentd + redisでidカウンタ
数値が上がったらアラート
→異常値→4

4. 異常値確認
異常値だったらmemachedへblockidとして登録
// 別プロセスで定期的にredisをチェック。

これでいけそうです。

/// インストール

http://blog.bbtune.com/archives/2412/nginx-exchange-header

以前と同じ方法でrpmを作ります。

https://github.com/agentzh/nginx-eval-module

1.0.3を使わせていただきます。

   –add-module=/tmp/nginx/headers-more-nginx-module-0.19rc1\
   –add-module=/tmp/nginx/nginx-eval-module-1.0.3\

debugバージョンと2つあるので両方入れておきます。

nginx conf

upstream api_server {
 server 127.0.0.1:30101;
}
server {
 # underscores_in_headers on;
 server_tokens off;
 listen       80;
 server_name  dev.test;
 access_log   /var/log/nginx/dev.test.access.log  main;
 error_log /tmp/nginx_debug_log debug;

 location / {
   eval $var {
     set $memcached_key $http_x_auth;
     memcached_pass     localhost:11211;
   }
   if ($var != 1) {
     proxy_pass   http://api_server;
     break;
   }
   return 403;
 }
}

# telnet 127.0.0.1 11211
Trying 127.0.0.1…
Connected to 127.0.0.1.
set abc 0 0 1
1
STORED
curl -H “x-auth: xyz” http://dev.test/
200 OK
curl -H “x-auth: abc” http://dev.test/
403 Forbidden

な感じになりました。登録されいると403を返すようになりました。これでmemcachedに拒否リストを入れます。

This entry was posted on 月曜日, 4月 1st, 2013 at 7:17 PM and is filed under nginx, redis. You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

Unityによるゲームを公開しております iOS/Android
https://itunes.apple.com/jp/app/lost-knight-3d-action/id900917032
https://play.google.com/store/apps/details?id=com.groundroad.runknight

各種開発支援・機能開発等小さいお仕事などもお請けしております。
unity開発支援, PHPシステム開発, javascript/html5 フロント開発, titanium mobileアプリ開発
お気軽にお問い合わせください
大崎・五反田近郊での対面でのお打ち合わせはいつでも可能です。