サーバーにdev.somedomain.comとsomedomain.comの2つのサイトがあります。後者のServerAliasは* .somedomain.comです。すべてのドメインはSSL対応であり、ポート80へのすべてのリクエストはhttpsにリダイレクトされます。 somedomain.comサイトは、廃止予定の別のサーバーにある古いサイトのプロキシです。
dev.somedomain.comは魅力のように機能します
http://somedomain.com
は何らかの理由で000-default.conf構成に「キャッチ」されますが(httpsはそうではありません)、http://www.somedomain.com
(serveralias * .somedomain.com)は000-defaultに「キャッチ」されません。 .conf、および期待どおりに動作しています。
000-default.confを無効にすると、 https://dev.somedomain.com/phpmyadmin (000-defaultが有効になっている場合に機能します-理由を理解していると思いますが、 )
私は高低を検索しましたが、これを理解することができませんでした。
somedomain.conf:
<VirtualHost *:80>
ServerName dev.somedomain.com
Redirect 301 / https://dev.somedomain.com
</VirtualHost>
<VirtualHost *:80>
ServerName somedomain.com
ServerAlias *.somedomain.com
Redirect 302 / https://somedomain.com/
</VirtualHost>
そして、000-default.confは、somedomain.confを壊しているようです:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${Apache_LOG_DIR}/error.log
CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>
somedomain-ssl.conf:(これには問題はないようですが、確認のためにここに含まれています)
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName dev.somedomain.com
DocumentRoot "/var/www/somedomain/wwwroot"
Alias /phpmyadmin /usr/share/phpmyadmin
Alias /index.php /var/www/somedomain/index.php
Alias /import-data.php /var/www/somedomain/import.php
<Directory /var/www/somedomain/wwwroot>
Options FollowSymLinks
AllowOverride None
Require all granted
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA]
</Directory>
ErrorLog /var/www/somedomain/logs/error.log
CustomLog /var/www/somedomain/logs/access.log combined
ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php7.0-fpm.sock|fcgi://localhost/var/www/somedomain/
SSLCertificateFile /etc/letsencrypt/live/dev.somedomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/dev.somedomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-Apache.conf
</VirtualHost>
<VirtualHost *:443>
ServerName somedomain.com
<Location "/">
ProxyPreserveHost On
#anonymised IP to protect the guilty:
ProxyPass http://172.0.0.10/
ProxyPassReverse http://somedomain.com/
AddOutputFilterByType INFLATE;SUBSTITUTE;DEFLATE text/html
Substitute "s|http://somedomain.com/|/|iq"
SetOutputFilter DEFLATE
</Location>
SSLCertificateFile /etc/letsencrypt/live/dev.somedomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/dev.somedomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-Apache.conf
</VirtualHost>
</IfModule>
長い質問の短い:http://somedomain.com
がapachesのデフォルトページを表示するのに対し、http://www.somedomain.com
は-予想どおり-https://somedomain.com
にリダイレクトされますか?
答えは明白で、私はただ盲目だと思いますが、何が起こっているのか本当に分かりません。
ありがとうございました
編集
VirtualHost configuration:
*:443 is a NameVirtualHost
default server dev.somedomain.com (/etc/Apache2/sites-enabled/somedomain-ssl.conf:2)
port 443 namevhost dev.somedomain.com (/etc/Apache2/sites-enabled/somedomain-ssl.conf:2)
port 443 namevhost somedomain.com (/etc/Apache2/sites-enabled/somedomain-ssl.conf:35)
*:80 is a NameVirtualHost
default server somedomain.com (/etc/Apache2/sites-enabled/000-default.conf:1)
port 80 namevhost somedomain.com (/etc/Apache2/sites-enabled/000-default.conf:1)
port 80 namevhost dev.somedomain.com (/etc/Apache2/sites-enabled/somedomain.conf:1)
port 80 namevhost somedomain.com (/etc/Apache2/sites-enabled/somedomain.conf:7)
wild alias *.somedomain.com
まず、コマンドapachectl -S
の出力から始めます。すべての仮想ホストとそれらが由来するファイルを表示します。
出力で最初にリストされている仮想ホストは、「デフォルトの仮想ホスト」です。これは000-default.confにあると思います。その場合、その仮想ホストにはServerName
がないため、グローバル(サーバー)コンテキストまたはマシンのホスト名から仮想ホストを取得します。これが「somedomain.com」の場合、このドメインへのリクエストはこの仮想ホストに到達します。がそうでない場合は、トラブルシューティングに役立つapachectl -S
の出力を表示してください。
説明:これは仮想ホストの動作方法です。 ApachaeはServerName
またはServerAlias
に対して使用されるホスト名(実際には 'Host' HTTPヘッダーの内容)を一致させようとし、一致する仮想ホストがリクエストを受信すると、それを見つけます。一致するものが見つからない場合、リストされている最初の仮想ホストが使用されます。したがって、同じServerName
を持つ2つの仮想ホストがある場合、最初のホストのみがその名前を使用してアクセスできます。
ベストプラクティス:すべての仮想ホストにServerName
を与えて、どのリクエストがそれぞれに届くかを明確に確認し、設定変更を行うたびにapachectl -S
を実行します