Nginxのワイルドカード仮想ホスト


25

Nginxをサーバーにインストールしたばかりで、結果には非常に満足していますが、ワイルドカード仮想ホストを挿入する方法はまだわかりません。

これは、私が望む[ディレクトリ]構造です。

-- public_html (example.com)
---subdoamin 1 (x.example.com)
---subdomain 2 (y.example.com)

ご覧のとおり、かなり基本的なものですが、新しいサブドメインのAレコードを追加するだけでドメインを追加できます。これにより、public_htmlの下にある同じ名前のサブディレクトリが即座にポイントされます。

Webにはさまざまなものがありますが、私はこのようなものに出くわしていません。

どんな助けも大歓迎です。


例に2つの異なる名前がある場合、「同じ名前のサブディレクトリ」の意味がわかりません:subdomain 1/ x.example.com-明確にできますか?
ニックグリム

確かに、非常に明確ではない申し訳ありません。サブドメインx.example.comがあるとしましょう。ディレクトリは/ public_html / xになりますが、/ public_html /を指すにはexample.comとwww.example.comの両方が必要です
-rorygilchrist

回答:


39

見せます。

構成ファイル

server {
  server_name example.com www.example.com;
  root www/pub;
}

server {
  server_name ~^(.*)\.example\.com$ ;
  root www/pub/$1;
}

テストファイル

2つのテストファイルがあります。

$ cat www/pub/index.html 
COMMON

$ cat www/pub/t/index.html 
T

テスト中

静的サーバー名:

$ curl -i -H 'Host: example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:42 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

$ curl -i -H 'Host: www.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:48 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

正規表現サーバー名:

$ curl -i -H 'Host: t.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:54 GMT
Content-Type: text/html
Content-Length: 2
Last-Modified: Wed, 23 Mar 2011 07:56:40 GMT
Connection: keep-alive
Accept-Ranges: bytes

T

残念ながら機能しません。すべてのサブドメインは、public_htmlを指しているだけです。ここでは、第2のサーバ設定は以下のとおりです。server{ listen 80; server_name ~^(.*)\.example\.com$ ; location / { root /var/www/public_html/$1; index index.html index.htm index.php; } location ~ \.php$ { root $1; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/public_html/$1$fastcgi_script_name; include fastcgi_params; } }
rorygilchrist

4
「残念ながら動作しません」は、残念ながら詳細を提供しません。詳細については、常にnginx error.logを調べてください。この構成がどのように機能するかを示すために、回答を更新しました。Nginxのバージョンが0.8.54であることがわかります。
アレクサンダー

ちょうど今私のために完璧に働いた。
クレアファーニー

5

以下のこのNginx構成ファイルでは、ワイルドカードホスト名を使用して、対応するフォルダーに動的にルーティングすると/var/www/vhost/同時に、それぞれのログファイルを動的に生成できます。

http://test1.wildcard.com/var/www/vhost/test1
                                                   /var/log/nginx/test1.wildcard.com-access.log                                                    /var/log/nginx/test1.wildcard.com-error.log

http://test2.wildcard.com/var/www/vhost/test2
                                                   /var/log/nginx/test2.wildcard.com-access.log                                                    /var/log/nginx/test2.wildcard.com-error.log

wildcard.conf

server {
  listen 80;
  listen [::]:80;

  #  Match everything except dot and store in $subdomain variable
  #  Matches test1.wildcard.com, test1-demo.wildcard.com
  #  Ignores sub2.test1.wildcard.com
  server_name ~^(?<subdomain>[^.]+).wildcard.com;

  root /var/www/vhost/$subdomain;

  access_log /var/log/nginx/$host-access.log;
  error_log  /var/log/nginx/$host-error.log;
}

解決策を説明してください。
アンドリューシュルマン

これは、既存の回答と実質的に同じように見えます。これは何を追加しますか?
マイケルハンプトン

1
もう少し特異性を提供します。みんなの役に立つことを願っています。
-AnthumChris

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.