nginx、カスタムサブドメイン、および書き換え

さまざまなWebプロジェクトでは、ユーザーのサブドメインをその場で整理するという課題が生じます。 nginxを使用する場合、次の構成が役立ちます。
サーバー{
     80を聞きます。
     server_name example.com * .example.com;
    場所/ {
        ルート/var/www/example.com/$subdomain;
         index index.html index.php;
     }
     $サブドメイン ""を設定します;
     if($ host〜* ^([a-z0-9-\。] +)\。example.com $){
         $サブドメイン$ 1を設定します。
     }
     if($ host〜* ^ www.example.com $){
         $サブドメイン ""を設定します;
     }
 }
それ自体では、新しいものではなく、すでにハブで言及されていました それでも、ユーザーのサブドメインの書き換えを整理する問題は解決されていません。手元のタスクは少数のユーザーのサブドメインのさまざまな書き換えの整理であるという事実に注意を喚起します。特定のサブドメインに書き換えルールを適用することの主な問題は、2つのif 1つ目はサブドメインを明示的に指定することであり、2つ目はルール自体の一部です。 例:
 if(!-e $ request_filename){
  書き換える^(。+)$ /index.php?q=$1 last;
 }
残念ながら、現時点では、nginxはネストされたif構文またはそれらの「AND」演算子の使用を許可していません。 この方法では、ちょっとしたトリックが必要になります。nginxconfigsを含むフォルダーに次の内容のchecks.confファイルを作成します(Linuxでは/ usr / local / etc / nginxがあります。/etc/nginxの疑いがあるため)。
 set $ f "| f";
 set $ e "| e";
 set $ d "| d";

 if(!-f $ request_filename){
     set $ check $ check $ f;
 }
 if(!-e $ request_filename){
     set $ check $ check $ e;
 }
 if(!-d $ request_filename){
     set $ check $ check $ d;
 }
 $ check $サブドメイン$ checkを設定します。
彼は何をしていますか? 実際、現在のサブドメインの名前を$ check変数に入れ、クエリの最後に「フラグ」を追加します(つまり、-fがtrueの場合、-fが追加され、-eがtrueの場合、| eなどが追加されます)。 )次に、サブドメインでのこのファイルの使用を整理し、構成ファイルに次の行を追加します。
場所/ {
   ルート/var/www/example.com/$subdomain;
    index index.html index.php; 
  example.com/*.confを含めます。 
}



nginx configフォルダーにexample.comディレクトリーを作成します。 各サブドメインの書き換えルールを保存します(ファイルごとに1つ、ファイルが存在しないため、このサブドメインでは書き換えが不要です。例として、DokuWikiが実行されているdocsサブドメインの同様のファイルの内容を示します。
 if($ subdomain = "docs"){
    リライト^(/)_ media /(.*)$ 1lib / exe / fetch.php?media = $ 2 last;
    リライト^(/)_ detail /(.*)$ 1lib / exe / detail.php?media = $ 2 last;
     rewrite ^(/)_ export/(►^/†+)/(.*)$ 1doku.php?do = export_ $ 2&id = $ 3 last;
 }

サービス/checks.confを含める;

 if($ check〜* ^ docs。* [f]。* $){
     rewrite ^(/)(。*)?(。*)$ 1doku.php?id = $ 2&$ 3 last;
    書き換え^(/)$ $ 1doku.php最後;
 }
ファイル自体は2つの部分で構成されています。 最初の部分(インクルード前)は、無条件の書き換えで構成されます。 ユーザードメイン構成自体にそれらを取り出すこともできますが、この場合、すべての卵を1つのバスケットに格納する方が便利です。 ) 明らかに、 -eタイプのチェックが必要な場合、正規表現の1文字を置き換えるだけで十分です。残念ながら、この方法では、自動ユーザーサブドメインを使用するときの別の問題を解決できません。つまり、基本認証を通じてサイトの特定のフォルダーへのアクセスを制限します.htaccessの類似)。 これは、if.PS演算子内でこのようなルールが設定されているlocationディレクティブが受け入れられないという事実によるものです。これはHabrに関する私の最初の記事です。



All Articles