web-dev-qa-db-ja.com

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

私は私のサーバー上の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に配置されます。

172
simoes

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

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とaliasの違いを私ができる以上に説明しています。

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

203
furq

Locationディレクティブシステムは

/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;
}
89
Kernelv5
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

44
VBart