LoginSignup
5
7

More than 3 years have passed since last update.

OpenResty + Redisで動的リバースプロキシ

Last updated at Posted at 2019-08-03

OpenResty + Redisで動的リバースプロキシの動作検証を行ったので、設定内容をメモ。
サブドメインをキーにRedisから値を取得し、HTTPリクエストヘッダに追加する。

OpenRestyをインストール

下記を参考に実施
https://qiita.com/nobuh/items/40ef50dd70fdf8a580e4

Redisインストール

下記を参考に実施
https://qiita.com/KurosawaTsuyoshi/items/f8719bf7c3a10d22a921

テスト用のデータをRedisに登録

# redis-cli -p 6379
127.0.0.1:6379> set test "test-value"
OK
127.0.0.1:6379> get test
"test-value"
127.0.0.1:6379>

Nginx設定

nginx.conf
# ワーカプロセス数
worker_processes 1;
# エラーログ出力先
error_log /var/log/nginx/error.log;
# PIDファイルの配置先
pid /var/run/nginx.pid;
# 1ワーカプロセスが同時オープン可能なファイルディスクリプタ数最大値
worker_rlimit_nofile 1024;

events {
    # 1ワーカプロセスが同時オープン可能なコネクション数最大値
    worker_connections 512;
}
http {
    # アクセスログ出力先
    access_log /var/log/nginx/access.log;
    # nginxに常時接続しているクライアントに対するタイムアウト時間
    keepalive_timeout 10s;
    server {
        listen 80;
        server_name  ~^(?<subdomain>[^\.]+).example.com;
        location / {
            # 全てのアドレスを許可
            allow all;
            # Luaスクリプト
            rewrite_by_lua '
                -- モジュールをロード
                local redis = require "resty.redis"
                -- Redisオブジェクトを生成
                local redisObj = redis:new()
                -- タイムアウト値を設定( 単位  ミリ 秒)
                redisObj:set_timeout(3000)
                -- Redisに接続
                local ok,err = redisObj:connect("127.0.0.1",6379)
                if not ok then
                        ngx.say("接続失敗:",err)
                        return
                end

                -- サブドメインを取得
                local res,err = redisObj:get(ngx.var.subdomain)
                if not res then
                        ngx.say("取得失敗:",err)
                        return
                end
         -- リクエストヘッダに追加
                ngx.req.set_header("X-TEST-Header",res)
            ';
                proxy_pass http://10.10.10.1:80;
        }
    }
}

Nginxリロード

# nginx -p $(pwd) -s reload

動作確認

http://test.<ドメイン名>」へhttpアクセスしリクエストヘッダーより抜粋。
Redisから取得した値がヘッダに入っている。

["x-test-header"]=> array(1) { [0]=> string(10) "test-value" } }
5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7