すべてのトラフィックを www サブドメインにリダイレクトし、すべての http リクエストを https リクエストにリダイレクトするように Web サイトを設定しようとしています。約 1 週間前にすべてを再インストールするまで、設定は完全に機能していたため、DNS レコード (www とクラウドの A レコードを含む) の問題ではないことはわかっています。発生した問題は、非常に奇妙な動作をすることです。
(投稿をわかりやすくするために、ドメインを「example.com」に置き換えました。)
機能しないもの:
http://example.com - redirects to https://www.example.com,
but yields SSL_PROTOCOL_ERROR
http://cloud.example.com - redirects to https://www.example.com/myfiles/,
but yields SSL_PROTOCOL_ERROR
https://example.com - no redirect to www, and yields SSL_PROTOCOL_ERROR
https://www.example.com - yields SSL_PROTOCOL_ERROR
https://cloud.example.com - no redirect to www, and yields SSL_PROTOCOL_ERROR
何が機能するか:
http://www.example.com - works like a dream
私の Apache 構成手順のすべて (クリーン インストールから):
sudo echo -e "\\ndeb http://ftp.debian.org/debian jessie-backports main" >> /etc/apt/sources.list
sudo apt-get update && sudo apt-get -y upgrade
# Because you'll want the latest certbot...
sudo apt-get -y install python-certbot-apache -t jessie-backports
sudo apt-get -y install apache2 php5 libapache2-mod-php5 php5-mcrypt php5-mysql php5-cli
sudo a2enmod rewrite
/etc/apache2/apache2.confの最後に以下の内容を(rootとして)記述します。
ServerName example.com
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://www.example.com/
</VirtualHost>
<Directory /var/www/(.*)>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Directory>
仮想ホストと証明書の作成
sudo tee /etc/apache2/sites-available/www.conf << "EOP"
<VirtualHost *:80>
ServerName www.example.com
Redirect / https://www.example.com/
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /var/www/html/
ServerName www.example.com
</VirtualHost>
EOP
sudo a2ensite www
sudo service apache2 restart
sudo certbot --apache --domain www.example.com
#I apply this to /etc/apache2/sites/enabled/default-ssl.conf
sudo mkdir -p /var/www/html/myfiles/
sudo tee /etc/apache2/sites-available/cloud.conf << "EOP"
<VirtualHost *:80>
ServerName cloud.example.com
Redirect / https://www.example.com/myfiles/
</VirtualHost>
<VirtualHost *:443>
ServerName cloud.example.com
Redirect / https://www.example.com/myfiles/
</VirtualHost>
EOP
sudo a2ensite cloud
sudo service apache2 restart
sudo apache2ctl configtest #which reports everything's ok
サーバーに関する詳細情報:
サーバーは Debian 8.6 (amd64) のクリーンインストールであり、Apache のバージョン番号は 2.4 であるため、ソフトウェアの安定性は問題ではありません。
SSLの問題
A はcat /var/log/apache2/error.log
私に次のことを言いました:
[ssl:warn] [pid 11737] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
答え1
証明書はドメイン名と一致する必要があります。
sudo certbot --apache --domain www.example.com --domain cloud.example.com --domain example.com
LE 証明書ごとに最大 100 個の SAN (サブジェクト別名) を持つことができます。
SNI で同じ IP を持つ複数の証明書を使用することもできます (openssl のバージョンでサポートされているはずです)
SSLオプションとファイルをリストアップする必要があります。</VirtualHost>