12

次のようなドメイン用にnginx構成がセットアップされているとしましょう:

server {

  root /path/to/one;
  server_name one.example.org;

  location ~ \.php$ {
    try_files       $uri =404;
    fastcgi_pass    127.0.0.1:9000;
    fastcgi_index   index.php;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include         fastcgi_params;
  }

}

別のコンテンツを持つ別のドメインを追加したい場合、以前のドメインから同等のステートメントを再利用する方法はありますか?それとも、サポートしたい新しいドメインごとにすべてを複製する必要がありますか?

server {

  root /path/to/two; # different
  server_name two.example.org; # different

  location ~ \.php$ {
    try_files       $uri =404;
    fastcgi_pass    127.0.0.1:9000;
    fastcgi_index   index.php;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include         fastcgi_params;
  }

}

locationディレクティブをクロージャの外に移動しようとしましたserverが、nginx を再起動するときに「場所ディレクティブはここでは許可されていません」というエラーが発生したため、明らかにうまくいきません。

4

2 に答える 2

22

これは、nginx Map モジュールを使用する良い例です。http://wiki.nginx.org/HttpMapModule

以下は私が試したことです。それは私のdevboxで動作します。ノート

  1. map ディレクティブは http ブロックにのみ配置できます。
  2. map ディレクティブを宣言することによるパフォーマンスの低下は無視できます (上記のリンクを参照)
  3. 別のルート フォルダやポート番号などを自由に設定できます。

    map $subdomain $root_folder {
      one  /path/to/one;
      two  /path/to/two;
    }
    
    map $subdomain $port_number {
      one 9000;
      two 9100;
    }
    
    server {
      listen  80;
      server_name  ~^(?P<subdomain>.+?)\.mydomain\.com$;
      root  $root_folder;
    
       location ~ \.php$ {
        try_files       $uri =404;
        fastcgi_pass    127.0.0.1:$port_number;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include         fastcgi_params;
      }
    }
    
于 2013-03-29T20:57:17.577 に答える
14

できるよ:

 server_name one.example.org two.example.org;

ドメイン名を除いて両方が完全に同一である場合

同様の場所ブロックがある場合は、それらの場所を別のファイルに移動してから、

include /etc/nginx/your-filename; 

各サーバーブロックで簡単に使用する

于 2013-03-29T19:16:21.753 に答える