Apache: vários sites, mas nenhum redirecionamento

1

Por favor, desculpe se esta é uma questão de nível iniciante, mas eu preciso de um conselho urgente.

Eu quero executar dois sites, digamos foo.org e bar.info , no mesmo servidor. Ambos devem ser acessíveis por http e https. Meu diretório /etc/apache2/sites-enabled contém os arquivos foo e bar .

Os dois arquivos são assim (omitindo algumas entradas para registro):

foo

<VirtualHost *:80>
    ServerAdmin [email protected]

    ServerName www.foo.org
    DocumentRoot /var/www/dir
    ServerAlias foo.org foo.de www.foo.de
        RewriteEngine On
        RewriteOptions inherit

</VirtualHost>
<VirtualHost *:443>
    ServerAdmin [email protected]

    ServerName www.foo.org

    DocumentRoot /var/www/dir
    ServerAlias www.foo.de
    RewriteEngine On
    RewriteOptions inherit
#         # SSL Specific options
        SSLEngine on
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
        SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
    SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
</VirtualHost>

bar

<VirtualHost *:80>
        ServerAdmin [email protected]

        ServerName blog.bar.info
        DocumentRoot /var/www/bar/blog
        ServerAlias www.blog.bar.info
        RewriteEngine On
        RewriteOptions inherit

</VirtualHost>
<VirtualHost *:80>
        ServerAdmin [email protected]

        ServerName analytics.bar.info
        DocumentRoot /var/www/bar/analytics
#        ServerAlias 
        RewriteEngine On
        RewriteOptions inherit
</VirtualHost>
<VirtualHost *:443>
        ServerAdmin [email protected]

        ServerName blog.bar.info

        DocumentRoot /var/www/bar/blog
        RewriteEngine On
        RewriteOptions inherit
#         # SSL Specific options
        SSLEngine on
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
        SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
        SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
</VirtualHost>

O principal problema é que ao acessar o link , ele é redirecionado para link .

Com http, parece funcionar bem.

Qual é o meu erro? Além disso: Como posso garantir que um site nunca seja redirecionado para o outro?

EDIT: O arquivo ports.conf contém:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>
    
por clstaudt 25.07.2012 / 09:04

2 respostas

3

Quando você diz "redirecionamento", quer dizer que ele está apenas veiculando o conteúdo errado sem a URL no navegador do cliente mudar, correto? Meu palpite é que você não tem uma diretiva NameVirtualHost *:443 na sua configuração - na estrutura de configuração do Debian que você tem, isso deve estar em ports.conf .

Tenha cuidado com essa configuração, no entanto. A execução apenas com o certificado SSL auto-assinado é excelente para testes, mas causará problemas se você não tiver conta quando for aberto na Internet.

Você precisará de uma dessas três coisas para que isso funcione sem erros quando exposto ao público:

  • Um único certificado SSL que abrange os dois domínios. Isso é chamado de certificado SAN ou UCC e custa mais do que dois certificados regulares para cobrir os dois domínios diferentes.
  • Um endereço IP diferente para cada site SSL, cada um com seu próprio certificado.
  • Garantias de que todos os navegadores clientes que acessam seu site são capazes de TLS SNI, o que permitiria configurar cada site com um certificado diferente, todos no mesmo endereço IP. Até o Windows XP começar a desaparecer em 2014, não aposte nisso para a maioria dos sites públicos.

Editar:

Para fazer com que o cliente receba um erro ao tentar acessar um site sem o SSL <VirtualHost> configurado, você precisará modificar o host virtual padrão em 443.

O primeiro bloco <VirtualHost *:443> a ser carregado assume a função de "padrão", atendendo a todas as solicitações de nomes que não correspondem ao ServerName ou ServerAlias em outro bloco <VirtualHost *:443> . Portanto, vamos criar um "padrão" que não forneça nada além de erros, enquanto as solicitações para os outros sites configurados ainda obtêm o tratamento correto.

  • Crie um arquivo em /etc/apache2/sites-available chamado 0-ssl-default ou algo similar no início do alfabeto, com conteúdo como este:

    <VirtualHost *:443>
        ServerName default-ssl-catch-all
        <Location />
           Order allow,deny
           Deny from all
        </Location
    </VirtualHost>
    
  • Ative isso com a2ensite 0-ssl-default e reinicie o Apache.

por 25.07.2012 / 09:14
1

Em sua configuração da porta 443 do www.foo.org você precisa configurar o ServerAlias para conter uma entrada para foo.org

ServerAlias foo.org foo.de www.foo.de
    
por 25.07.2012 / 09:14