タイトル

Need for Answer

ラベル nginx の投稿を表示しています。 すべての投稿を表示
ラベル nginx の投稿を表示しています。 すべての投稿を表示

2016年4月6日水曜日

NGINX Luaのshared dictionaryの使用容量を調べたいのまき

nginx lua使ってますか!
worker間でメモリ共有するのに、shared dictionary使いますよね!

こんな感じで定義します
http {
        lua_shared_dict HOGE 30m;
}

…なのですが、これって実際どれくらいメモリ確保すればいいのかわかんないですよね。
ということで、こちらを調べようという話です。agentzh氏が作ってくださったngx-shmを使います。

まずはnginxのworkerのプロセスIDを調べます。masterじゃないですよ、workerですよ!

#ps aux | grep nginx
root     46581  0.0  0.0 103304   856 pts/0    S+   12:50   0:00 grep nginx
root     56272  0.0  0.1 118384 19492 ?        Ss   Mar30   0:00 nginx: master process
nobody   56273  2.2  0.7 215004 125824 ?       S    Mar30 180:48 nginx: worker process
nobody   56274  2.2  0.6 191208 102056 ?       S    Mar30 182:14 nginx: worker process
nobody   56276  2.2  0.6 195812 106524 ?       S    Mar30 181:37 nginx: worker process
この場合56273ということがわかりましたので、このPIDをngx-shmに渡します。こんな感じです
#./ngx-shm -p 56273
Tracing 56273 (/usr/local/openresty/nginx/sbin/nginx)...

shm zone "HOGE"
    owner: ngx_http_lua_shdict
    total size: 3072 KB

Use the -n <zone> option to see more details about each zone. 30 microseconds elapsed in the probe.
これだと確保容量だけしかわからないので、メモリ使用量の詳細を調べます
#./ngx-shm -p 56273 -n HOGE
Tracing 56273 (/usr/local/openresty/nginx/sbin/nginx)...

shm zone "HOGE"
    owner: ngx_http_lua_shdict
    total size: 30720 KB
    free pages: 27912 KB (6978 pages, 176 blocks)

32 microseconds elapsed in the probe handler.
これが調べたかった結果です!メモリ確保しすぎですね!

2015年7月4日土曜日

nginx_luaでhtmlを書き換えたい!のまき

レスポンスボディ、書き換えてますか!

…唐突ですが、OSSとか使ってるとちょっとした修正、加えたいってあると思うんですよ。

パッチ当てるのも面倒くさいなーという時、「リバースプロキシでレスポンスボディを書き換えてしまう」という方法もありますよーという話です。実現する選択肢は色々あるのですが、今回はnginx_luaで実現しました。

やってることは、「nginxでリバースプロキシしたhttp_bodyを、luaスクリプトで書き換え」という感じです。こんなかんじで設定すれば、Apacheで動いてるAPサーバーをSPDY対応させつつ書き換えられますね!

 server {
    listen 443 ssl spdy;

    ssl on;

    ssl_certificate your_server.crt;
    ssl_certificate_key your_server.key;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    add_header Alternate-Protocol 443:npn-spdy/3;
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";

    location / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto https;


      proxy_pass http://localhost:80;

        body_filter_by_lua
        '
        replacestr = "$1http://www.google.com/url?q=$2"
        ngx.arg[1] = ngx.re.gsub(ngx.arg[1],"(href=\\")(https?.*?\\")", replacestr)
        ';
    }
 }


2015年4月6日月曜日

NGiNXのアクセス元を、GoogleMapにレンダリングするのまき

NGiNXのアクセス元を可視化する方法を実験してたら、うまくいったので資料化してみました!結構使い道あるんじゃないかな−と思います!たぶん!


2015年3月9日月曜日

NGiNX_Luaでバックエンドからのリターンコードで処理をわけるのまき

NGiNXのリバースプロキシ使ってますか!Apache+mod_wsgiの前段にNGiNXを置くとかあるんじゃないでしょうか!多分!

…ですが、とっても困るのがバックエンドサーバーで50xエラーが出ることがあるんですよね。困りますね。ということで、NGiNX_luaでリトライ処理するサンプルコードを書いてみました!

 upstream backend {
    server [proxy先URL];
}

server {
    listen 80 default;
    server_name 127.0.0.1 localhost;

    location / {
       content_by_lua '
         local STR = "/check"..ngx.var.uri
         local res = ngx.location.capture(STR)

         if res.status == ngx.HTTP_OK then
           ngx.say(res.body)
         else
           ngx.sleep(1)
           res = ngx.location.capture("/check")
           ngx.say(res.body)
         end
       ';
    }

    location /check {
      internal;
      rewrite /check/(.*) /$1 break;
      proxy_pass http://backend/;
  }
}

2014年11月24日月曜日

ELBからのヘルスチェックは適当に200を返そう

Elastic Load Balancing(ELB)便利ですね!ELBの後ろにnginxを置いてる人、多いと思います!

…なのですが、ELBのHTTPヘルスチェックのためにファイルを置くのめんどくさい!ELBにはHTTPで応答できるかだけ監視して欲しいってこと…あると思います!

ということでこんな設定でどうでしょうか!

map $http_user_agent $bot {
  default                  0;
  ~*(ELB-HealthChecker)    1;
}

server {
    if ($bot = 1) {
      return 200;
    }
}

2014年9月16日火曜日

Nginxのステータスをjsonで取得する

Nginx使ってますか!

 …で使ってるとステータスをjsonで取得したくなリますよね!作りました!
Githubへのリンク

作りましたは嘘です!先人の素晴らしいソースをちょっと改良しただけです!
 td-agentでステータスを収集したりとかするときに便利だと思います。