我有一個Ubuntu服務器,有幾個子域運行虛擬主機(Apache)。大多數虛擬主機都在一個文件中,但是其中一個被分隔成兩個文件(因爲Let's Encrypt在一個.conf文件中不支持多個虛擬主機)。我只在其中一個子域上安裝了SSL證書;我目前不關心SSL的其他域。通過SSL端口防止子域重定向
我遇到的問題是,對其他子域的HTTPS請求被路由到一個子域,我不希望這樣。
因此,舉例來說,這裏是我的主.conf文件結構:
<VirtualHost *>
ServerAdmin [email protected]
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot /var/www/domain
<Directory "/var/www/domain">
...
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName sub.domain.com
DocumentRoot /var/www/sub_domain
<Directory "/var/www/sub_domain">
...
</Directory>
</VirtualHost>
這是我的SSL安裝的子域.conf文件結構:
<VirtualHost *:80>
ServerName ssl.domain.com
DocumentRoot /var/www/ssl_domain
<Directory "/var/www/ssl_domain">
....
</Directory>
</VirtualHost>
最後,這裏的.conf文件Let's Encrypt生成以偵聽HTTPS請求:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName ssl.domain.com
DocumentRoot /var/www/ssl_domain
<Directory "/var/www/ssl_domain">
....
</Directory>
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/key.key
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /path/to/chain.pem
</VirtualHost>
</IfModule>
正常的HTTP請求到y的域名工作正常。對啓用SSL的子域的HTTPS請求正常工作。但是HTTPS請求對除'ssl.domain.com'之外的任何域首先生成'您的連接不安全'錯誤,然後從'ssl.domain.com'加載。如果我是誠實的,我寧願它只是產生一個錯誤,並留下它。我如何防止重定向?
我要指出,我試着從改變SSL子域名的虛擬主機:
<VirtualHost *:443>
到:
<VirtualHost ssl.domain.com:443>
這是沒有效果的。
編輯:我也嘗試實施一個.htaccess重寫規則來改變https http。我認爲它不會起作用,因爲在虛擬主機遇到.htaccess之前請求會觸及虛擬主機,但我認爲我會試一試。是的,沒有運氣。
不幸的是,它似乎沒有辦法。我在我的httpd.conf中添加了'NameVirtualHost *:80',但問題仍然存在(另外,當我重新啓動Apache時,它現在給了我警告:'AH00548:NameVirtualHost沒有任何作用,並且會在下一版本中刪除' – CGriffin