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で更新可能なビューを作成する方法の詳細な説明

推薦する

Windows 10 Home Edition に Docker for Windows をインストールする

0. 背景ハードウェア: Xiaomi Notebook Air 13/Inter Core i7-...

CentOS サーバーに FFmpeg をインストールするための完全な手順

序文サーバーシステム環境は、CentOS 6.5 (最終) です。 FFmpeg をサーバーに正常に...

clearfixとclearの例

この記事では、CSS を理解し始めたばかりの人を対象に、主に HTML で clearfix と c...

MySQLがトランザクション分離を実装する方法の簡単な分析

目次1. はじめに2. RC および RR 分離レベル2.1. RRトランザクション分離レベルでのク...

MySQL 5.7.20 のインストールと設定方法のグラフィック チュートリアル (win10)

この記事では、MySQL 5.7.20のインストールと設定方法を参考までに紹介します。具体的な内容は...

CSS3 で虫眼鏡効果を模倣するいくつかの方法の原理の分析

記事のタイトルが「模造虫眼鏡」なのはなぜですか?今日お話ししたいのは、一般的に言われているような、マ...

CentOS 8.0.1905 は ZABBIX 4.4 バージョンをインストールします (検証済み)

Zabbix サーバー環境プラットフォームバージョン: ZABBIX バージョン 4.4システム:...

MySQLデータベースはsysbenchに基づくOLTPベンチマークテストを実装します

Sysbench は、MySQL データベース ストレージ エンジン InnoDB のディスク I/...

MySQL 8.0 のインデックス スキップ スキャン

序文MySQL 8.0.13 では、インデックス スキップ スキャン (インデックス ジャンプ スキ...

マーキー要素は、スクロールするフォントや画像などの効果を実装します。

マーキー要素を使用すると、単純なフォント(画像など)のスライドやその他の効果を実現できます。コードを...

MySQL で指定エンコーディングを実装する際の落とし穴について

前面に書かれた環境: MySQL 5.7+、MySQL データベースの文字エンコードは utf8、テ...

現在のMySQL接続数を表示する方法の詳細な説明

1. 現在のすべての接続の詳細情報を表示します。 ./mysqladmin -uadmin -p -...

Linux入力サブシステムフレームワーク原理の分析

入力サブシステムフレームワークLinux 入力サブシステムは、上から下に向かって、入力サブシステム ...

CSS フレキシブルレイアウト FLEX、メディアクエリ、モバイルクリックイベントの実装

フレックスレイアウト定義: Flexレイアウトの要素は、 Flex 、または略して「コンテナー」と呼...

Vue3+TypeScriptはaxiosをカプセル化し、リクエスト呼び出しを実装します

まさか、2021年になってもTypeScriptについて聞いたことがない人がいるなんて?プロジェクト...