nginxにて、httpリクエストのgetパラメータの値からリダイレクトする方法のメモ

nginxにて、httpリクエストのgetパラメータの値を判定し、

別のプロセス(リダイレクト)を呼び出す方法についてハマったのでメモ。

前提条件

・osはlinux(Ubuntu 7.5.0)

・nginxは、port8080で起動していて、外部からリクエストを受信する

・nginxは、getパラメータの値を参照して、別のプロセスに(port8081,8082)に処理を渡したい。

・最終的な処理結果をnginxからレスポンスする

やりたいこと詳細

こんな構成でサーバーを運用を想定

①外部からのアクセスが「http://localhost:8080?id=API001」だったら

ローカルサーバー「127.0.0.1:8081」のポート8081にhttpリクエストを渡す。

②外部からのアクセスが「http://localhost:8080?id=API001」以外だったら

ローカルサーバー「127.0.0.1:8082」のポート8082にhttpリクエストを渡す。

このような場合は、nginxの「nginx.conf」 では以下のように書く。

修正後
	server {
		listen 8080 default_server;

		location / {
			#$args の部分にnginxからのget部分の引数が入っている
    		if ($args ~* id=API001) {
        		proxy_pass http://127.0.0.1:8081;
    		}
    		if ($args !~* id=API001) {
        		proxy_pass http://127.0.0.1:8082;
    		}
		}
		
    	#以下は間違っていた書き方で、クエリストリングは location では判別できないとのこと
    	#location ~* ^.*API021.$ {
    	#}
	}

クエリストリングは location では判別できないとのこと。

私は、一生懸命にlocationのところでgetパラメータの値を判定しようとしていて、それが間違いだった。

正しい書き方のポイントは、location以下でif文を使って分岐していること。

面倒なことといえば、pythonやphpのようにelse文がないので、if文をうまく使って分岐させることだ。

この答えに行き着くまでに、スタック・オーバーフローで回答してくださった、

Taichiさんありがとうございます!

nginxにてgetパラメータ値で判断して別サーバ(別プロセス)に処理を渡したい

以上、nginxについてでした!

関連コンテンツ(広告含む)

関連コンテンツ(広告含む)

スポンサーリンク
PR




PR




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
PR