Правильная настройка виртуальных хостов SSL
Я установил SSL-сертификат на свой экземпляр Ubuntu EC2, и мне нужен один из веб-сайтов, размещенных на этом экземпляре, чтобы он был доступен через https.
У меня есть несколько веб-сайтов, размещенных на одном IP-адресе через виртуальные хосты. Однако мне нужен только один веб-сайт для доступа через https.
Я уверен в следующем:
- SSL сертификат правильно установлен
- Порт 443 открыт на EC2
Я уверен в этом, потому что, когда я попробовал следующую конфигурацию виртуального хоста в /etc/apache2/sites-enabled/mysslsite, я мог получить доступ к сайту через https. Проблема заключалась в том, что все остальные сайты были недоступны, потому что к ним также требовался доступ ТОЛЬКО через https. Ниже приведен файл конфигурации виртуального хоста:
<VirtualHost *>
ServerAdmin support@example.com
DocumentRoot /var/www/mysslwebsite
ServerName www.mysslwebsite.com
ServerAlias mysslwebsite.com
<Directory /var/www/mysslwebsite>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>
<Directory />
Options FollowSymLinks
AllowOverride all
</Directory>
SSLEngine on
SSLCertificateFile /etc/ssl/apache2/mycertificate.com.crt
SSLCertificateKeyFile /etc/ssl/apache2/mycertificate.key
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
</VirtualHost>
При такой конфигурации, хотя она находится в этой конкретной конфигурации виртуального хоста mysslwebsite, все остальные веб-сайты не будут загружаться через стандартный http и отображать следующее сообщение при доступе через http:
Bad Request
Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.
Hint: https://www.myothersite.com/
Кто-нибудь знает, как я могу это исправить?
Спасибо
-------РЕДАКТИРОВАТЬ-------
Я попробовал следующие виртуальные хосты:
NameVirtualHost *:80
NameVirtualHost *:443
<VirtualHost *:80>
ServerAdmin support@email.com
DocumentRoot /var/www/mysslsite
ServerName www.mysslsiste.com
ServerAlias mysslsite.com
<Directory /var/www/mysslsite>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>
<Directory />
Options FollowSymLinks
AllowOverride all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
</VirtualHost>
<VirtualHost *:443>
ServerAdmin support@email.com
DocumentRoot /var/www/mysslsist
ServerName www.mysslsist.com
ServerAlias mysslsist.com
<Directory /var/www/mysslsist>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>
<Directory />
Options FollowSymLinks
AllowOverride all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
SSLEngine on
SSLCertificateFile /etc/ssl/apache2/certificate.com.crt
SSLCertificateKeyFile /etc/ssl/apache2/certificate.key
</VirtualHost>
#Another virtual host with another site
<VirtualHost *>
ServerAdmin support@email.com
DocumentRoot /var/www/myothersite
ServerName www.myothersite.com
ServerAlias myothersite.com
<Directory /var/www/myothersite>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>
<Directory />
Options FollowSymLinks
AllowOverride all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
</VirtualHost>
Однако я не смог получить доступ к сайту через SSL. Я мог получить к нему доступ через http, хотя.
Apache выдает следующие предупреждения при перезапуске:
NameVirtualHost *: 443 не имеет виртуальных хостов NameVirtualHost *:80 не имеет виртуальных хостов
Это сбивает с толку, так как порт 80 имеет около 10 виртуальных хостов.
1 ответ
Мне кажется, что вы не указываете порт 443 или порт 80 для виртуального хоста. Таким образом, все движется к виртуальному хосту, который настроен для SSL. Поэтому http-трафик не принимается, так как он настроен на прием только SSL. Попробуй это
NameVirtualHost *:80
<VirtualHost *:80>
ServerName blah
DocumentRoot /var/www/html/
</VirtualHost>
<VirtualHost *:443>
...
- your config here -
...
</VirtualHost>
Вы могли бы даже сделать перенаправление для виртуального хоста, работающего на порту 80. Может быть что-то вроде этого:
Redirect permanent / https://<URL>