サブドメイン上の異なるルートフォルダーを持つ複数の場所でnginxを構成する


202

サーバー上の2つの異なるフォルダーにサブドメインのルートURLとサブドメインのディレクトリを提供しようとしています。これが私が持っている簡単な設定で、機能していません...

server {

    index index.html index.htm;
    server_name test.example.com;

    location / {
            root /web/test.example.com/www;
    }

    location /static {
            root /web/test.example.com/static;
    }
}

この例でtest.example.com/は、インデックスファイルを/web/test.example.com/www

とに行くことtest.example.com/staticで、インデックスファイルをもたらします/web/test.example.com/static

回答:


238

次のaliasディレクティブを使用する必要がありますlocation /static

server {

  index index.html;
  server_name test.example.com;

  root /web/test.example.com/www;

  location /static/ {
    alias /web/test.example.com/static/;
  }

}

nginxのwikiには、より良い私ができるよりも根とエイリアスの違いを説明します。

一見するとrootディレクティブに似ているように見えるかもしれませんが、ドキュメントルートは変更されず、要求に使用されるファイルシステムパスのみが変更されることに注意してください。Nginxが発行するリクエストでは、リクエストのロケーション部分が削除されます。

なお、root及びaliasハンドル違っスラッシュを末尾。


67
彼は必要ありませんalias。ユーザーが記入したコミュニティWikiではなく、公式ドキュメントを読んでください。引用:場所がディレクティブの値の最後の部分と一致する場合は、ルートディレクティブを使用することをお勧めします。
VBart 2012

9
これは、末尾のスラッシュがないことを除いて、私にとってはうまくいきました。エイリアスは次のようになります。alias /web/test.example.com/static/;
ajma 2014

8
@VBartドキュメントはあなたが彼らが言っているように彼らが引用するものを正確に言いますが、彼らはその命令をまったく正当化しません-それは任意のスタイルの選択のようです。その背後に論理的な理由はありますか?
Mark Amery

104

ロケーションディレクティブシステムは

あなたが開始するすべてのリクエストを転送したいのと同じように/static、あなたのデータは/var/www/static

したがって、単純な方法では、最後のフォルダをフルパスから分離します。つまり、

フルパス : /var/www/static

最後のパス:/static と最初のパス:/var/www

location <lastPath> {
    root <FirstPath>;
}

だから、あなたが何を間違えたか、そしてあなたの解決策は何かを見てみましょう

あなたの間違い:

location /static {
    root /web/test.example.com/static;
}

あなたのソリューション:

location /static {
    root /web/test.example.com;
}

2
これは私を助けてくれました:フォルダー名を変更するか、物事を機能させるためにシンボリックリンクを設定する必要があることに気付きました。
cjm 2016年

3
どうもありがとう、私はまさにこのように失敗していました:)
bobmoff

10
これは、私がやりたいことをするための自由に対するかなり厳しい制限のようです。特定のパスで始まるURIを、そのURIパスが物理ファイルパスに含まれていないディレクトリから提供されるようにしたい。このソリューションでは、ドキュメントを「/ static」で終わるパスの下のディスクに配置することを強制されます。私はこれがまったく好きではありません。どこにでもファイルを置くことができる絶対的かつ完全な自由が欲しいのです。
SzczepanHołyszewski19年

48
server {

    index index.html index.htm;
    server_name test.example.com;

    location / {
        root /web/test.example.com/www;
    }

    location /static {
        root /web/test.example.com;
    }
}

http://nginx.org/r/root


2
との違いは何ですか?
TangMonk

5
@木の違い:のroot /web/test.example.com;代わりにroot /web/test.example.com/static;。nginxは、場所で指定されたパスをディレクトリツリーにマッピングします。パスとソースディレクトリは同じ名前を共有するため、で動作しrootます。
rmoestl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.