我正在嘗試配置我的網站以將所有流量重定向到 www 子網域,並將所有 http 請求重定向到 https 請求。我知道這不是 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
將以下內容(以 root 身分)放在 /etc/apache2/apache2.conf 的末尾
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 問題
Acat /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>