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

推薦する

一般的な XHTML タグの紹介

<br />しばらくの間、多くの人が XHTML の使い方を知らないことに気付きました。...

CentOS 7.6 Telnetサービス構築プロセス(Opensshアップグレードバトル第一弾のバックアップトランスポートライン構築)

不明な点があるときはいつでも、Blog Park にアクセスして、いつでも答えやインスピレーションを...

CentOS7 64ビットインストールmysqlグラフィックチュートリアル

MySQL をインストールするための前提条件: CentOS 7 64 ビットをインストールし、Ce...

MySQL サーバー ログイン エラー ERROR 1820 (HY000) の解決方法

障害サイト: MySQL サーバーにログインし、どのコマンドを実行してもこのエラーが発生します my...

通知メッセージカルーセルを実装するための CSS3 トランジション

Vueバージョンをファイルにコピーして使用します <テンプレート> <!-- カル...

CSSはスクロールを許可しながらスクロールバーを非表示にするためにオーバーフローを設定します

CSS は、スクロールを許可しながらスクロール バーを非表示にするために Overflow を設定し...

Linux の EXT シリーズファイルシステムフォーマットの詳細な説明

Linux ファイルシステム一般的なハードディスクは上図のとおりです。各ディスクは複数のトラックに分...

MySQLの実行プロセスとシーケンスについての簡単な説明

目次1:mysql実行プロセス1.1: コネクタ1.2: キャッシュ1.3: アナライザー1.4: ...

nginxリバースプロキシのyum設定の詳細な手順

パート0 背景社内のイントラネットサーバーは直接インターネットにアクセスすることはできませんが、外部...

MySQL インデックスクエリ最適化スキルを習得するための記事

序文この記事では、DBA がいないチームが参考にできるように、MySQL の一般的な使用に関するヒン...

Javascriptの基本ループの詳しい説明

目次サイクルのために入室のためのその間しながら行うループから抜け出す要約するサイクルのためにループは...

MySQL パーティション テーブルの基本入門チュートリアル

序文最近のプロジェクトでは、大量のデータを保存する必要があり、このデータには有効期限があります。クエ...

24 の実用的な JavaScript 開発のヒント

目次1.配列を初期化する2. 配列の合計、最大値、最小値3. エラー値をフィルタリングする4. 論理...

JavaScript におけるセミコロンの詳細

序文JavaScript ではセミコロンはオプションであり、使用するかどうかは主にコーディング スタ...

Idea は、Web プロジェクトを開始するように Tomcat を設定します。グラフィック チュートリアル

tomcatの設定1. 実行構成をクリック 2. tomcat localを選択 3. tomcat...