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

 

\転職サポートがある転職サービス4選!!(うち2件はIT未経験OK)/

サービス名
未経験 未経験OK 未経験OK 経験者向け 経験者向け
公開の求人数 ITエンジニア全体で35695件
ITエンジニア未経験で4000件
ITエンジニア全体で1万件以上
ITエンジニア未経験で600件以上
5,000件以上 2500件以上
利用対象 全職種 全職種 IT特化 ゲーム特化
特徴 ✓転職エージェントが伴走
✓求人数が多い
✓誰もが知る転職サービス
✓経歴を登録しておくとオファーが来る
✓IT専門のエージェントが対応
✓転職成功すると年収200万円以上の大幅アップがある
✓ゲーム転職に強い
✓有名ゲーム会社との取引が多い
転職サポート内容
  • 提出書類の添削
  • 面接対策
  • カウンセリング
  • 求人検索
  • キャリア相談
  • 求人紹介
  • 提出書類の添削
  • 面接対策
  • 求人検索
  • キャリアプラン提案
  • 提出書類の添削
  • 面接対策
公式サイト リクルートエージェント リクナビネクスト レバテックキャリア シリコンスタジオ

 

最新情報をチェックしよう!
>プログラミングスクール検索・比較表サイト

プログラミングスクール検索・比較表サイト

ワンクリック、さらに詳細に条件を指定してプログラミングスクールの検索ができます。さらに比較表により特徴を細かく比較できる!

CTR IMG