Apache-2.2

嘗試設置虛擬主機以阻止 IP 訪問,用於三個域以及在一個域上使用 SSL 時

  • October 17, 2013

所以我希望這一切都在一台伺服器上:

- 3 domains / websites
- SSL on one of them
- nothing to be accessed by an IP address (e.g. 'domain.com' is okay, but not by just typing '123.55.44.123' into the browser)

我在用:

- Ubuntu 12.04 LTS
- Apache

我已經設置了這些虛擬主機,並且一切都適用於非 SSL

<VirtualHost *:80>
ServerName 123.55.33.123
DocumentRoot /var/www/random-empty-folder
<Directory />
Options FollowSymLinks
Deny from all                    # notice the deny here
</Directory>
</VirtualHost>

<VirtualHost *:80>
ServerName www.domain-one.com
ServerAlias domain-one.com *.domain-one.com
DocumentRoot /var/www/domain-one
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>

<VirtualHost *:80>
ServerName www.domain-two.com
ServerAlias domain-two.com *.domain-two.com
DocumentRoot /var/www/domain-two
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>

...etc. for 'domain-three'

問題是我無法為 SSL 配置它。我的標準 SSL 設置是這樣的,但它允許使用 IP 地址進行訪問。我只需要停止:

<VirtualHost *:443>
ServerName www.domain-two.com:443
ServerAlias domain-two.com *.domain-two.com
DocumentRoot /var/www/domain-two
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>

還有一個’default-ssl’站點/文件被禁用,所以不確定我是否應該對此做些什麼。我已經嘗試啟用它並進行更改,但大多數情況下我遇到了“預設重複”錯誤。

所以,基於上述設置,我只需要阻止訪問

$$ https $$://123.55.44.123。提前致謝。 我總是在進行更改後執行“service apache2 reload”,以防萬一有人想知道。

由於請求的域在 http 標頭中(因此當 apache 必須決定使用哪個 vhost 配置時仍然加密)apache 使用 IP 和埠來選擇要使用的 SSL vhost 配置,而不是域名。

編輯:

我應該在我的回答中提到SNI和其他幾個因素。SNI 是對 TLS 的補充,它允許伺服器在一個 IP/埠組合上使用多個命名的虛擬主機配置。但是由於您只有一個 *:443 VirtualHost 配置塊,因此 apache 將始終選擇它。

您想要做的事情是可能的,最簡單的方法是啟動 default-ssl 作為不針對特定域的請求的統稱。我不太清楚啟動 default-ssl 時出現“預設重複”錯誤是什麼意思,完整的錯誤消息可能會更有幫助。我可以建議將符號連結命名為 000-default-ssl,以便首先設置您在其中的任何選項。

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