大量の動的仮想ホストをセットアップしようとして、nginxで約1時間遊んでいます。あなたがApacheでそれをしたことがあるなら、あなたは私が何を意味するか知っています。
目標は、オフィスにいる少数の人々(50人以上)のために動的なサブドメインを持つことです。
これをまとめるには、スクリプトに関する知識が必要です。私はPHPを使用しますが、bashスクリプトが得意な場合は、PHPを使用してください。私はこのようにします:
まず、いくつかのフォルダーを作成します(/ usr/local/etc/nginx/domain.com /)。
メインのnginx.confでコマンドを追加します:include /usr/local/etc/nginx/domain.com/*.conf;
このフォルダー内のすべてのファイルは、異なる仮想ホスト名subdomain.confである必要があります。
設定がアクションを実行するためにnginxサーバーを再起動する必要はありません。リロードするだけで済みます:/ usr/local/etc/rc.d/nginx reload
または、すべてのvhostを設定する必要があるconfファイルを1つだけ作成できます。これはおそらく、nginxが50個のファイルをロードする必要がなく、1つだけをロードするのに適しています。
スクリプトに問題がある場合は、それについて質問してください...
おそらくこれを行うことで、あなたがなりたい場所にたどり着くでしょう:
server {
root /sites/$http_Host;
server_name $http_Host;
...
}
文字通りその場でサイトを作成できるので、これが好きです。ドメインにちなんで名付けられた新しいディレクトリを作成し、DNSをサーバーのIPにポイントするだけです。
後でpartlovによって編集されたuser2001260の回答に基づいて、これが私の結果です。
これは、ローカル仮想マシン上にある開発サーバー用であり、各ドメインの最後に.dev
プレフィックスが使用されていることに注意してください。それを削除したい場合、または他のものを使用したい場合は、\.dev
ディレクティブのserver_name
部分を編集するか、完全に削除することができます。
server {
listen 80 default_server;
listen [::]:80 default_server;
# Match any server name with the format [subdomain.[.subdomain...]].domain.tld.dev
server_name ~^(?<subdomain>([\w-]+\.)*)?(?<domain>[\w-]+\.[\w-]+)\.dev$;
# Map by default to (projects_root_path)/(domain.tld)/www;
set $rootdir "/var/www/$domain/www";
# Check if a (projects_root_path)/(subdomain.)(domain.tld)/www directory exists
if (-f "/var/www/$subdomain.$domain/www"){
# in which case, set that directory as the root
set $rootdir "/var/www/$subdomain.$domain/www";
}
root $rootdir;
index index.php index.html index.htm index.nginx-debian.html;
# Front-controller pattern as recommended by the nginx docs
location / {
try_files $uri $uri/ /index.php;
}
# Standard php-fpm based on the default config below this point
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
server_name
の正規表現は、変数subdomain
およびdomain
をキャプチャします。 subdomain
部分はオプションであり、空にすることができます。デフォルトで、サブドメインがある場合、たとえばadmin.mysite.com
ルートがmysite.com
と同じルートに設定されるように設定しました。このようにして、同じフロントコントローラー(私の場合はindex.php
)がサブドメインに基づいてルーティングできます。ただし、まったく異なるアプリケーションをサブドメインに保持する場合は、admin.mysite.com
dirを設定すると、そのディレクトリがadmin.mysite.com
の呼び出しに使用されます。
注意:if
の使用は、リクエストごとに余分な処理オーバーヘッドが追加されるため、現在のnginxバージョンでは推奨されていませんが、開発環境での使用には問題ありません。この構成が何に適しているか。実稼働環境では、制御を強化してセキュリティを強化するために、大規模な仮想ホスト構成を使用せず、各サイトを個別に構成することをお勧めします。
server_name ~^(?<vhost>[^.]*)\.domain\.com$;
set $rootdir "/var/www/whatever/$vhost";
root $rootdir;
もう1つの方法は、ディレクトリを適切と思われるように分類できるように、数レベルの深さを含めることです。例えば:
include sites-enabled/*.conf;
include sites-enabled/*/*.conf;
include sites-enabled/*/*/*.conf;
include sites-enabled/*/*/*/*.conf;
@Samuuraiが提案したように、ここに短いバージョンAngular 5 with nginx build Integration:
server {
server_name ~^(?<branch>.*)\.staging\.yourdomain\.com$;
access_log /var/log/nginx/branch-access.log;
error_log /var/log/nginx/branch-error.log;
index index.html;
try_files $uri$args $uri$args/ $uri $uri/ /index.html =404;
root /usr/share/nginx/html/www/theft/$branch/dist;
}