NginxとLuaによるグレースケールリリースの実装

NginxとLuaによるグレースケールリリースの実装

memcachedをインストールする

yum インストール -y memcached
#memcached サービスを開始します。ポート 11211、nobody として開始、-d バックグラウンド モードで memcached を実行します -p11211 -u nobody -d
#グレースケールテストIPとして自分のIPを設定する
テルネット 127.0.0.1 11211
119.32.216.122 0 0 1 を設定
1
やめる

lua用のmemcachedをインストールする

https://github.com/openresty/lua-resty-memcached/archive/v0.11.tar.gz を取得します。
tar -zxvf v0.11.tar.gz
mkdir -p /usr/local/share/lua/5.1
cp -r lua-resty-memcached-0.11/lib/resty /usr/local/share/lua/5.1

test.luaファイルを作成する

clientIP = ngx.req.get_headers()["X-Real-IP"]
clientIP == nilの場合
  クライアントIP = ngx.req.get_headers()["x_forwarded_for"]
終わり
clientIP == nilの場合
  クライアントIP=ngx.var.remote_addr
終わり
  ローカル memcached=require "resty.memcached"
  ローカル memc、err=memcached:new()
  memcでない場合は
    ngx.say("memc のインスタンス化に失敗しました:",err)
    戻る
  終わり
  ローカル OK、エラー =memc:connect("127.0.0.1",11211)
  大丈夫でなければ
    ngx.say("接続に失敗しました:",err)
    戻る
  終わり
  ローカル res、フラグ、エラー =memc:get(clientIP)
  --ngx.say("値キー: ",res,clientIP)
  エラーの場合
    ngx.say("クライアントIPの取得に失敗しました",err)
    戻る
  終わり
  res == "1"の場合
    ngx.exec("@server_test")
    戻る
  終わり
  ngx.exec("@server_product")

nginx の設定

  サーバー{
    聞く 8867;
    サーバー名 www.siguoya.name;
    ルート /usr/local/nginx/1.12.1/html;
    位置 / {
      コンテンツ_by_lua_file /etc/nginx/test.lua;
    }
    場所 /hello {
      デフォルトタイプはテキスト/プレーンです。
      content_by_lua 'ngx.say("hello lua")';
    }
    場所 /ua
      デフォルトタイプはテキスト/プレーンです。
      コンテンツbylua
        クライアントIP = ngx.req.get_headers()["ユーザーエージェント"]
        ngx.say("IP:",クライアントIP)
        ';
    }
    場所 @server_product {
      デフォルトタイプはテキスト/プレーンです。
      200 'product' を返します。
    }
    場所 @server_test {
      デフォルトタイプはテキスト/プレーンです。
      200 'テスト' を返します。
    }
  }

IP 119.32.216.122をmemcachedに追加したので、http://www.siguoya.name:8867/にアクセスすると、コンテンツテストが表示されます。

グローバル プロキシをオンにした後、表示されたコンテンツが製品であり、一部のユーザーにとってグレースケール テストの効果を達成していることがわかりました。

Nginx と Lua のグレースケールリリースの実装に関するこの記事はこれで終わりです。Nginx と Lua のグレースケールリリースに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Nginx でグレースケールリリースを実装する 3 つの方法の概要

<<:  JS における ES6 継承と ES5 継承の違い

>>:  MySQLで更新可能なビューを作成する方法の詳細な説明

推薦する

Vueプロジェクトのパッケージングと展開の実際のプロセスの記録

目次序文1. 準備 - サーバーとnginxの使用1. サーバーを準備する2. nginxをインスト...

LinuxでIPアドレスが表示されない問題の解決方法

目次序文解決:ステップ1ステップ2序文環境: VMware Workstation 上に Linux...

MySQLの基本的な共通コマンドの概要

目次MySQL の基本的な共通コマンド1. SQL文2. テーブルを作成する3. フィールドのプロパ...

Vueのシンプルストアの詳しい説明

Vue におけるストアの最も単純な応用はグローバル ストレージです。ここでは、相互にジャンプするため...

Node.jsはSTMPプロトコルとEWSプロトコルに基づいてメールを送信します

目次1 STMP プロトコルに基づいてメールを送信する Node.js メソッド2 MS Excha...

Python 仮想環境のインストールとアンインストールの方法と発生する問題

Ubuntu16.04 のインストールとアンインストール pip実験環境Ubuntu 16.04; ...

jQueryは要素を追加した後に元のイベントが実行されない問題を解決します

まずエラーコードを見てみましょう。 html: <テーブルボーダー="1"...

bodyタグの主な属性の概要

bgcolor="テキストの色" background="背景画像&q...

VUE を使用して Ali Iconfont ライブラリをオンラインで呼び出す方法

序文何年も前、私はサーバー側の初心者でしたが、業界の競争が激しくなるにつれて、フロントエンドの初心者...

htm 初心者ノート(初心者は必ず読んでください)

1. HTMLとは何かHTML (ハイパーテキスト マークアップ言語): ハイパーテキスト マーク...

ubuntu20.04 LTSにdockerをインストールする方法

ゼロ: 古いバージョンをアンインストールするDocker の古いバージョンは、docker、dock...

HTML4とHTML5の違い: 入力にフォーカス実装コードを追加する方法

html4:コードをコピーコードは次のとおりです。 <フォーム> <p>&l...

CentOS 環境で NFS リモート ディレクトリ マウントを使用する手順の紹介

目次1. NFS の概要2. NFS構築1. NFSサーバーの構築2. NFSクライアントの構築3....

前後の秒、分、時間、日数を取得するMySQLデータベース

現在の時刻を取得します: current_timestamp を選択します。出力: 2016-06-...

Win2008 R2 mysql 5.5 zip 形式 mysql のインストールと設定

Win2008 R2 zip形式のMySQLのインストールと設定1. Baidu MySQL 5.6...