Como desativar o não-SSL no Apache apenas no host sem desabilitar em hosts virtuais?

2

Esta é uma extensão (não um dupe) de Como desabilitar a conexão não ssl no Apache 2.2

Como a pergunta acima, eu tenho:

Adicionada uma configuração do host virtual /etc/apache2/sites-available/example.com.conf com um certificado SSL.

<IfModule mod_ssl.c>
    <VirtualHost example.com:443>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine on

        SSLCertificateFile  /my/certs/mydomain.com.cert
        SSLCertificateKeyFile   /my/certs/mydomain.com.key
        SSLCACertificateFile    /my/certs/myprovider.ca

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>


    </VirtualHost>
</IfModule>

Então:

  1. Execute a2enconf ssl para ativar o SSL.
  2. Executar a2ensite example.com para ativar meu domínio.
  3. Executar a2dissite 000-default para desativar o host site padrão.
  4. Executar a2dissite default-ssl para desativar o host site ssl padrão.

O que deve permanecer é somente o link do site

No entanto, também posso acessar o link (não-SSL), que é um recurso inesperado.

A resposta da outra pergunta é simplesmente desabilitar a porta 80 comentando Listen 80 , mas isso significa que outros hosts virtuais não poderão especificar a porta 80.

Por que o Apache2 parece aceitar a porta 80 quando nenhum host virtual a especifica e qual é a maneira correta sem desabilitar totalmente a porta 80?

    
por tudor 13.10.2016 / 08:48

1 resposta

0

Isso é quase uma resposta porque não vaza informações da porta 80 por acidente:

Crie um arquivo em /etc/apache2/sites-available/forbidipaccess.conf com o conteúdo:

NameVirtualHost *:80
<VirtualHost *:80>
  <Location />
  Order deny,allow
  Deny from all
  </Location>
</VirtualHost>

Em seguida, execute:      sudo a2ensite forbidipaccess e      sudo service apache2 reload

Isso não bloqueia o IP como tal, mas emite uma resposta 403 Forbidden se não houver uma configuração com esse nome de domínio específico como seu ServerName ou ServerAlias.

Se quiséssemos ser super legais e não gostássemos da mensagem "Proibido", poderíamos alternativamente usar um Apache Rewrite para retornar um 301/2/3 que encaminharia o usuário para o SSL equivalente, por exemplo,

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/% [R=301,L]
    
por tudor 14.10.2016 / 03:48