web-dev-qa-db-ja.com

ApacheデフォルトVirtualHost

apacheでデフォルトのVirtualHostを設定するにはどうすればよいですか?できれば、デフォルトのホストをIPアドレスのホストと同じにしないでください。今、私はこのようなものを持っています:

NameVirtualHost *

<VirtualHost *>
ServerAdmin [email protected]
DocumentRoot /someOtherDir/
ServerAlias ip.of.the.server
</VirtualHost>

<VirtualHost *>
ServerAdmin [email protected]
DocumentRoot /someroot/
ServerAlias domain.com *.domain.com
</VirtualHost *>

ドメインがサーバーに転送されているが、このvhost.confファイルにない場合は、/ someOtherDir /のファイルが期待どおりにロードされます。ただし、ip-address自体とvhost.confファイルに追加されていないドメインに(まだ)別のルートを使用できるようにしたいと思います。これは可能ですか?

編集:私のコードを少し修正したので、実際のvhost.confファイルのように見えます

28
Tiddo

私は答えを見つけました:他の一致するブロックが見つからない場合、Apacheは最初のブロックを使用することを思い出したので、ブロックの先頭にserveraliasのないブロックを追加しました:

NameVirtualHost *

<VirtualHost *>
DocumentRoot /defaultdir/
</VirtualHost>

<VirtualHost *>
ServerAdmin [email protected]
DocumentRoot /someOtherDir/
ServerAlias ip.of.the.server
</VirtualHost>

<VirtualHost *>
ServerAdmin [email protected]
DocumentRoot /someroot/
ServerAlias domain.com *.domain.com
</VirtualHost>
46
Tiddo

Debianスタイルの仮想ホスト構成(sites-available/sites-enabled)を使用している場合、デフォルトのVirtualHostを設定する1つの方法は、特定の構成ファイルを最初にhttpd.confまたはApache.conf(またはメイン構成)に含めることです。ファイル)。

# To set default VirtualHost, include it before anything else.
IncludeOptional sites-enabled/my.site.com.conf

# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf

# Load virtual Host config files from "/etc/httpd/sites-enabled/".
IncludeOptional sites-enabled/*.conf
8
harmaahylje

別の設定は、設定ファイルの先頭ではなく末尾にデフォルトの仮想ホストを置くことです。この方法では、すべての代替仮想ホストがチェックされてから、デフォルトの仮想ホストと照合されます。

例:

NameVirtualHost *:80
Listen 80

...

<VirtualHost *:80>
        ServerName Host1
        DocumentRoot /someDir
</VirtualHost>

<VirtualHost *:80>
        ServerName Host2
        DocumentRoot /someOtherDir
</VirtualHost>

<VirtualHost *:80>
        DocumentRoot /defaultDir
</VirtualHost>
2
eaykin

ここの他の答えは私にとってはうまくいきませんでしたが、うまくいく非常に簡単な解決策を見つけました。

デフォルトのリストを最後のリストに追加し、ServerAlias *を指定しました。

例えば:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName www.secondwebsite.com
    ServerAlias secondwebsite.com *.secondwebsite.com
    DocumentRoot /home/secondwebsite/web
</VirtualHost>

<VirtualHost *:80>
    ServerName www.defaultwebsite.com
    ServerAlias *
    DocumentRoot /home/defaultwebsite/web
</VirtualHost>

訪問者がsecondwebsite.comで終わるものに行くことを明示的に選択しなかった場合、訪問者はデフォルトのWebサイトを取得します。

2
ArtOfWarfare

私は何がうまくいったかを言いますが、上記の他の答えは私の場合にはまったく役に立ちませんでした。それが誰かを助けることを願っています。

実際、Apache/2.4.39(Amazon)を使用するEC2 Linux AMIで仮想ホスト構成(サイトで使用可能/サイト対応)を使用しています。したがって、多くのサイト(ドメイン)にサービスを提供する1つのec2インスタンスがあります。

すでに仮想ホストがインストールされ、動作していることを考慮してください。私のフォルダー/ etc/httpd/sites-availableには、domain.com.confのように、ドメイン名(接尾辞.conf)のファイルがいくつかあります。そのような新しいファイルを作成します。

Sudo nano /etc/httpd/sites-available/domain.com.conf

<VirtualHost *:80>
    ServerName www.domain.com
    ServerAlias domain.com
    DocumentRoot /var/www/html/domain
</VirtualHost>

Sites-availableのfile.confごとに、シンボリックリンクを作成します。

Sudo ln -s /etc/httpd/sites-available/domain.com.conf /etc/httpd/sites-enabled/domain.com.conf

これはデフォルトの構成です。したがって、サーバーのIPによって直接アクセスする場合、サイトで使用可能なフォルダー内の最初のファイル(.conf)のDocumentRootにリダイレクトされ、ファイル名でソートされます。

を持っている iPによるアクセス時のデフォルトのDocumentRootフォルダー、0a.confという名前のファイルを作成する必要があります。この新しいファイルはサイトで使用可能なフォルダーの最初になるため、Apacheはこのサイトを提供します。

シンボリックリンクを作成する必要があります。

Sudo ln -s /etc/httpd/sites-available/0a.conf /etc/httpd/sites-enabled/0a.conf

配信順序を確認するには、それを使用します。

Sudo apachectl -S

次に、Apacheを再起動してチェックアウトします。

幸せになる=)

必須-上記のどれも私にとってはうまくいきませんでした。 ISPConfig で混乱したこのApache構成では、IPベースの仮想ホストと* vhosts(すべてのIPの割り当て/キャッチではない)ベースの仮想ホストの奇妙な組み合わせを継承しました。

同じページで構成されていないホストをApacheに提供したかったのです。私が持っていたのは、設定されていないホストが000-default.confの後に最初のvhostに行きました。 *:80が最初のvhostとしてすべて定義されていても、デフォルトのApacheではなく最初に定義されたサイトがロードされます。

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
</VirtualHost>

完全に有効な設定ではありませんが、最終的に機能したのは、ServerName/ServerAliasが定義されていないIPベー​​スの仮想ホストを追加することでした。

<VirtualHost 192.168.10.10:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost 192.168.10.10:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        SSLEngine On
        ...
</VirtualHost>

$ apachectl -Sは最初にIPベースのvhostsを出力し、*ベースのvhostsを後に出力します。最後に、私のデフォルトサイトが実際のサイトの前にロードされます。

AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/Apache2/sites-enabled/000-default.conf:50
192.168.10.10:80        is a NameVirtualHost
         default server server.tld (/etc/Apache2/sites-enabled/000-default.conf:34)
         port 80 namevhost server.tld (/etc/Apache2/sites-enabled/000-default.conf:34)
         port 80 namevhost some-site.tld (/etc/Apache2/sites-enabled/100-some-site.tld.vhost:7)

...

46.23.86.103:443       is a NameVirtualHost
         default server server.tld (/etc/Apache2/sites-enabled/000-default.conf:38)
         port 443 namevhost server.tld (/etc/Apache2/sites-enabled/000-default.conf:38)
         port 443 namevhost some-site.tld (/etc/Apache2/sites-enabled/100-some-site.tld.vhost:182)

...

*:80                   is a NameVirtualHost
         default server server.tld (/etc/Apache2/sites-enabled/000-default.conf:1)
         port 80 namevhost server.tld (/etc/Apache2/sites-enabled/000-default.conf:1)

注意事項-このような設定では、* vhostsは機能しないため、すべてのvhostsにIPを適用する必要があります。

1
seven

同じ問題がありました。仮想ホストのIncludeOptionalディレクティブの前にhttpd.conf自体に次を追加することで修正できました。これで、localhostとIP 192.168.x.xはどちらもApacheのデフォルトのテストページをポイントします。他のすべての仮想ホストは期待どおりに機能しています。

<VirtualHost *:80>
    DocumentRoot /var/www/html
</VirtualHost>

リファレンス: https://httpd.Apache.org/docs/2.4/vhosts/name-based.html#defaultvhost

0
Neethu Isaac