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万円以上の大幅アップがある |
✓ゲーム転職に強い ✓有名ゲーム会社との取引が多い |
転職サポート内容 |
|
|
|
|
公式サイト | リクルートエージェント | リクナビネクスト | レバテックキャリア | シリコンスタジオ |