Tenho vários domínios ( example1.com
, example2.com
, ...
) hospedados no mesmo IP. Um desses domínios ( example3.com
) possui um certificado SSL e quero servi-lo por HTTPS, mantendo todos os outros sites em HTTP. Eu tenho isso configurado e funcionando corretamente, até agora.
Meu problema é que as solicitações para https://www.example1.com
(observe os s) estão sendo tratadas pela seção de configuração do apache para example3.com
(que começa <VirtualHost *:443>
), o que causa problemas, pois este é um site Django e, entre outras coisas, gera um 400 Bad Request devido a example1.com
não estar em Configuração do Django ALLOWED_HOSTS
.
Entendo que a natureza do SSL significa que o Host:
cabeçalho não é conhecido até que a conexão segura seja estabelecida. Mas existe uma maneira de fazer com que o apache rejeite quaisquer solicitações por HTTPS que não sejam para example3.com
?
Eu esperava o uso da ServerName
diretiva dentro do SSL Virtualhost para restringir essa seção apenas ao host nomeado, mas após uma inspeção mais detalhada dos documentos , parece que é apenas o caso de hosts virtuais baseados em nome.
Editar: tentei adicionar um padrão abrangente como a primeira seção, como o seguinte:
<VirtualHost *:443>
ServerName default.only
<Location />
Require all denied
</Location>
</VirtualHost>
Isso causa o seguinte erro:
[Thu Dec 04 10:31:27.922801 2014] [mpm_event:notice] [pid 10498:tid 3074255488] AH00491: caught SIGTERM, shutting down
[Thu Dec 04 10:31:29.928483 2014] [ssl:emerg] [pid 30518:tid 3074300544] AH02240: Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] ((null):0)
[Thu Dec 04 10:31:29.928551 2014] [ssl:emerg] [pid 30518:tid 3074300544] AH02312: Fatal error initialising mod_ssl, exiting.
Como @Polosson disse no comentário, você precisará criar dois hosts virtuais da porta 443 para terminar com esse arranjo.
O primeiro que você listar será o catch-all para qualquer coisa que chegar na porta 443 -- isso está implícito em listá-lo primeiro. O segundo será usado quando o host for example3.com via ServerName.
Os erros que você postou indicam que você não incluiu a configuração SSL necessária relevante para seus domínios; para quaisquer domínios/subdomínios que pretenda que sejam acessíveis via SSL, terá de fornecer informação relevante para o certificado, etc, na
VirtualHost
(s) configuração(ões) dos domínios em questão, por exemplo:Você precisará então criar
VirtualHost
segmentos apropriados para o resto de seus domínios, mas nestes você configurará apenas a porta de escuta para ser 80, sem opções de configuração de SSL, por exemplo:Espero que isto ajude!
PS, as configurações acima para
SSLCipherSuite
eSSLProtocol
são boas - você pode usá-las para economizar tempo pesquisando outras configurações possíveis, se desejar.