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についてでした!

 

\IT未経験者からのサポートあり!転職サービス3選!!/

サービス名
未経験 未経験OK 未経験の転職専用 経験者向け
公開の求人数 ITエンジニア全体で1万件以上
ITエンジニア未経験で600件以上
未公開 5,000件以上
利用対象 全職種 IT特化 IT特化
特徴 ✓誰もが知る転職サービス
✓経歴を登録しておくとオファーが来る
✓企業担当者と条件交渉
✓スキルの身につく企業を紹介
✓IT専門のエージェントが対応
✓転職成功すると年収200万円以上の大幅アップがある
転職サポート内容
  • 求人検索
  • 企業担当者と交渉
  • 求人紹介
  • ライフプランのサポート
  • キャリア相談
  • 求人紹介
  • 提出書類の添削
  • 面接対策
公式サイト リクナビネクスト テックゲート レバテックキャリア

 

最新情報をチェックしよう!