Nginxを使用して、IPアドレス/サブネットに応じて異なるページを提供します


8

恐ろしい理由で...私はNginxをWebサーバーとして使用していて、内部ユーザー(たとえば10.0.0.0/16)に1つのページを提供し、他のIPアドレスの外部ユーザーに別のページを提供したいと考えています。

例えば:

  • IPが10.0.0.34の「内部」PCはcompany.com/page.htmlにアクセスし、ページinternal.htmlを取得します

  • IP 8.8.8.8の「外部」PCはcompany.com/page.htmlにアクセスし、ページexternal.htmlを取得します


2
明確にするために; Nginxを使用することは恐ろしいことではありません。Nginxは素晴らしいです!
Jon Rhoades、

回答:


13

Nginx geoモジュールを利用してください。クライアントのIPアドレスに基づいて変数の値を設定できます。geoディレクティブはhttpセクションになければなりません:

http {
  geo $client {
    default extra;
    10.0.0.0/8 intra;
  }

後で場所で使用してファイルを検索できます

location / {
  try_files $uri.$client $uri = 404;
}

どの手段、nginxのは、設定されます$clientのいずれかextra、またはintraクライアントのIPに基づきます。それがイントラネットクライアントだとしましょう。クライアントが要求した場合page.html、Nginxはファイルを検索します/your/root/page.html.intra。そのようなファイルがない場合は、を検索し/your/root/page.htmlます。これらのいずれも見つからない場合、Nginxは404 "Not Found"応答を返します。ドキュメントの「try_files」の詳細

ちなみに、indexディレクティブは変数もサポートしています。例えば

index index.$client.html index.html;

2
うまくいきました-私は場所= / filenameを書き、最終的に^ /filename.$clientを書き換えました;
Jon Rhoades、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.