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

推薦する

W3C チュートリアル (10): W3C XQuery アクティビティ

XQuery は、XML ドキュメントからデータを抽出するための言語です。 XQuery は、XML...

テーブルセルの幅tdの設定は無効であり、内部コンテンツによって常に引き伸ばされます

テーブルページを作成するときに、td に設定された幅が無効になることがあります。td の幅は常に内部...

CSSは、閉じることができるマスクレイヤーを備えたポップアップウィンドウ効果を実装します。

実際の開発ではポップアップウィンドウがよく使われます。CSS3を勉強していたときに、閉じることができ...

一般的なテーブルコンポーネントの Vue カプセル化の完全な手順記録

目次序文テーブル コンポーネントをカプセル化する必要があるのはなぜですか?ステップ1: 共通コンポー...

CentOS7 64でのMySQL5.6.40の詳細なインストール手順

CentOS7 64でのMySQL5.6.40のインストール手順1) 以前にインストールしたMySQ...

Docker可視化管理ツールであるDocker UIの使用

1. DockerUIの紹介DockerUI は Docker API をベースとしており、Dock...

Ubuntu で FTP サーバーを構築する方法の詳細な説明 (成功保証)

1. 今日の午後、コースの要件により、Ubuntu で FTP サーバーを設定する実験を行う必要が...

複数の無関係なテーブルからデータをクエリし、MySQL でページングする方法

MySQL 複数の無関係なテーブルクエリデータとページング機能要件主キーと外部キーの関連付けがない ...

ラベルタグの使用時に発生する問題の分析と解決策

最近何かをするときにラベル タグを使用しました。以前はラベル タグをほとんど使用していなかったため、...

MySQLを閉じることができない問題を解決する方法

mysql が閉じない場合の解決策:コンピュータのタスクバーを右クリックしてタスクマネージャーを開き...

MySQL コマンドライン操作中のエンコードの問題の詳細な説明

1. MySQLデータベースのエンコーディングを確認する mysql -u ユーザー名 -p パスワ...

アニメーションとトランジションの違い

CSS3アニメーションとJSアニメーションの違いJSはフレームアニメーションを実装しますCSS3はト...

Linux で JDK 環境を構成する方法

1. 公式ウェブサイトにアクセスして、jdk-8u162-linux-x64.tar.gzなどのLi...

CSS でホバー ドロップダウン メニューを実装する方法

いつものように、今日は非常に実用的な CSS 効果についてお話します。マウスがボタンに移動すると、ド...

MySQL の複数テーブル関連付け 1 対多クエリを使用して最新のデータを取得する方法の例

この記事では、MySQL で複数のテーブルを使用して 1 対多のクエリを使用して最新のデータを取得す...