web-dev-qa-db-ja.com

ServerAliasが機能しない

名前ベースのホスティングで複数のウェブサイトをホストするように構成したVPSがあります。 example.comwww.example.comだけを使用している間は、すべて問題ありません。 example.netでも機能しますが、example.netを試してみると、defaultサイト構成に戻り、デフォルトが表示されます。 (空の)index.htmlページ。

デフォルトのファイルは次のとおりです。

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/Apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/Apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

example.comサイトの構成は次のとおりです。

    <VirtualHost *:80>
     ServerAdmin [email protected]
     ServerName example.com
     ServerAlias www.example.com
     DocumentRoot /srv/www/example.com/public_html/
     ErrorLog /srv/www/example.com/logs/error.log
     CustomLog /srv/www/example.com/logs/access.log combined
<Directory /srv/www/example.com/public_html/>
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>

そして、これがexample.netサイトの設定です:

<VirtualHost *:80>
     ServerAdmin [email protected]
     ServerName example.net
     ServerAlias www.example.net
     DocumentRoot /srv/www/example.net/public_html/
     ErrorLog /srv/www/example.net/logs/error.log
     CustomLog /srv/www/example.net/logs/access.log combined
<Directory /srv/www/example.net/public_html/>
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>

問題はどこにあるのでしょうか?

ServerAliasプロパティに問題があると思います。

それはサイトの構築方法のせいでしょうか? example.comJoomlaサイトであり、example.netはZendFrameworkサイトであるため。念のため、example.netの.htaccessファイルも挿入します。example.comは無効になっているためです:example.net

SetEnv APPLICATION_ENV development

RewriteRule  ^(browse|config).*  - [L]
ErrorDocument 500 /error-docs/500.shtml
SetEnv CACHE_OFFSET 2678400


<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Expires "Fri, 25 Sep 2037 19:30:32 GMT"
Header unset ETag
FileETag None
</FilesMatch>

RewriteEngine On
RewriteRule ^(adm|statistics) - [L]
RewriteRule ^/public/(.*)$ http://example.net/$1 [R]
RewriteRule ^(.*)$ public/$1 [L]

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

編集私の質問は[〜#〜]絶対に[〜#〜]明確です:問題は、1つのサイトがwwwプレフィックスを使用する場合と使用しない場合の両方で機能し、2番目のサイトは機能しないことです。 2番目のサイトがwwwプレフィックスでも機能するようにする方法を知りたいです。

2

構成ディレクティブの優先順位が、Apacheが要求を処理する方法と一致していることを確認してください。つまり、ディレクティブが次のように読み込まれると、運が悪くなります。

  • example.com
  • デフォルト/キャッチオール
  • universal.lv

それらが単一のファイルで宣言されているか複数のファイルで宣言されているかは関係ありません-「universal.lv」が最後である限り、default/catch-all vhostが先行するため、到達しません。

この理由から、私は通常、default/catch-all configに「z-default.conf」(または、「z」、「zz」などで始まるドメインがある場合)という名前を付けて、他の仮想ホストが一致しない場合にのみ処理されます。

それに応じて名前を変更してみてください。


更新:_default_VirtualHostディレクティブと混同しないように

ワイルドカードDNS を使用してexample.comへのすべてのリクエストをサーバーのIPに送信し(キーが間違っているサブドメインをキャッチ)、Apacheは次の構成ファイルを解析します。

  • 000-default.conf --VirtualHost _default_:80/ServerName <hostname>-サーバーのIPに対するリクエストをキャッチします(プライマリドメインにリダイレクトするか、conf.d/securityで指定されたデフォルトのDirectoryで単にブロックできます)
  • example.conf-VirtualHost *:80/ServerName www.example.com
  • example2.conf-VirtualHost *:80/ServerName www.example2.com
  • zzz-example.conf-VirtualHost *:80/ServerName example.com/ServerAlias *.example.com-正規のwwwドメインにリダイレクトします
  • zzz-example2.conf-VirtualHost *:80/ServerName example2.com/ServerAlias *.example2.com-正規のwwwドメインにリダイレクトします

文書化されているように Apacheは最初に一致するVirtualHost(つまり、_default_:80)を選択しますが、ServerAliasディレクティブでワイルドカードを使用している場合はこの動作は望ましくありません。

3
danlefree

最初に 仮想ホストに関するApacheドキュメント を読むことをお勧めします。

優れた例が http://httpd.Apache.org/docs/2.2/vhosts/name-based.html に示されています。

NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>

<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>

NameVirtualHost の部分に注意してください。エラーログ(/var/log/Apache2/error.log)は、間違いの可能性があることを警告しているはずです。

注:構成ファイルを変更した後、Apacheを再起動する必要があります。

1
Lekensteyn

httpd.confでNameVirtualHostを有効にする必要があります。そうすると、同じip:portで複数の仮想ホストを定義できます。

0
silviud