Ssl

為什麼 IP 地址的重寫規則顯示“不安全”而域名在 Apache2 中執行良好?

  • August 13, 2019

我為此創建了 ssl 證書,因此我在myDomain.com 下面看到了以下 3 個文件/etc/apache2/sites-enabled``Ubuntu

example.com-le-ssl.conf  example.com.conf  example.conf

我的example.com.conf長相是這樣的

<VirtualHost *:80>
   ServerAdmin admin@example
   ServerName example.com
   ServerAlias www.example.com
   DocumentRoot /var/www/example.com
   JKMount /* ajp13_worker
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com [OR]
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

現在,如果我輸入http://www.example.com它會被重定向到https://www.example.com

但是如果有人發現我的伺服器 ip 地址並輸入http://<myIpAddress>內容是作為非 https

所以我在上面的 virtualHost 塊之外添加了這個

<VirtualHost myIpAddr:80>
   ServerAdmin admin@example
   ServerName example.com
   ServerAlias www.example.com
   DocumentRoot /var/www/example.com
   JKMount /* ajp13_worker
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =myIpAddr [OR]
RewriteCond %{SERVER_NAME} =myIpAddr:80
RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

但是當我進入http://myIpAddr:80http://myIpAddr看到這個 時在此處輸入圖像描述

這是因為您的 SSL 證書包含您的主機名(example.com 和 www.example.com),但不包含您的 IP 地址。也不應該 - 普通客戶端只會使用您的實際域名,而不是您的伺服器的 IP 地址。

根據您顯示的配置,您的重定向應該轉到主機名而不是 IP 地址,並且僅根據您的配置無法看出為什麼會出錯。但我不太明白為什麼你認為你需要為你的 IP 地址設置一個單獨的虛擬主機,或者你為什麼需要對 Host 標頭進行 RewriteCond 匹配。

我應該從您的文件中刪除 RewriteCond 行,只保留 RewriteRule 行。

還要檢查你得到的第三個文件——通常不應該同時存在example.com.confexample.conf。該文件中可能有一些內容在使用 IP 地址進行配置之前被讀取。

引用自:https://serverfault.com/questions/979027