Após ativar o HTTPS no meu servidor Apache2 - eu recebo erros 404 em cada solicitação [fechada]

10

Ok, então eu nunca tive experiência com SSL / HTTPS, apenas lidei com HTTP padrão. Recentemente, comecei a trabalhar em um site que precisará de SSL. Então, é claro, eu saí e pesquisei como e comecei. Cheguei ao estágio de instalar o certificado SSL com êxito - o cadeado verde aparece e o servidor responde às solicitações HTTPS na porta 443. O problema é que, não importa o que eu faça, não consigo exibir nenhuma página usando HTTPS / SSL, no entanto, eles apareceram bem na porta 80 / HTTP (até redirecionar HTTP para HTTPS).

Simplificando, eu posso acessar o site HTTPS absolutamente bem, no entanto, minhas páginas não estão sendo enviadas, e um 404 é enviado para cada solicitação.


/etc/apache2/sites-available/[name✨.conf

<VirtualHost *:80>
    ServerName [serverName]

    RewriteEngine On

    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
</VirtualHost>

<VirtualHost *:443>
    ServerName [serverName]
    ServerAdmin [email]
    DocumentRoot [docRoot]

    # I know the following SSL cert stuff is correct

    SSLEngine On
    SSLCertificateFile [...]/[domain].crt
    SSLCertificateKeyFile [...]/[certificate].key
    SSLCertificateChainFile [...]/[theotherone].crt

    ErrorLog ${APACHE_LOG_DIR}/[custom]_error.log
        CustomLog ${APACHE_LOG_DIR}/[custom]_access.log combined

        <Directory "[docRoot]">

                Options Indexes FollowSymLinks MultiViews

        AllowOverride All
        Order allow,deny
        allow from all

        </Directory>

</VirtualHost>

Não tenho certeza se há mais alguma coisa que você queira examinar ou outros detalhes, mas, se houver, me avise.

EDITAR:

Após algumas pesquisas nos arquivos de configuração, estabeleci que, por qualquer motivo, ao conectar-se ao HTTPS, o servidor está usando a raiz do documento na configuração padrão (/ var / www /), mas essa configuração padrão não é ativada no a2ensite. Não consigo descobrir onde está localizada a configuração que está causando isso

Michael Longhurst
fonte
Suas Rewritediretivas parecem que você está tentando executar o Apache atrás de um proxy reverso mal configurado. Se o seu Apache estiver servindo o domínio diretamente sem nenhum proxy, você deve simplesmente largar todas as Rewritediretivas e substituí-las por uma única Redirect. E configure arquivos de log separados para cada um VirtualHost, para que você possa ver exatamente qual VirtualHostprocesso cada solicitação.
kasperd
Quanto às reescritas, eu as estava usando apenas para obter um redirecionamento temporário (não tinha 100% de certeza nessa fase), agora aprendi que o redirecionamento é perfeitamente capaz disso (sim, é ruim que eu não soubesse disso). ) Em relação aos arquivos de log separados, eu já fiz isso. Também descobri qual era o problema e vou atualizar para refletir isso.
Michael Longhurst

Respostas:

11

É absolutamente necessário redirecionar todas as solicitações HTTP para https? Porque parece que é isso que você está tentando fazer aqui.

Sugiro que você comece removendo as seguintes linhas do seu conf:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]

Eu suspeito que a sintaxe pode estar errada lá. Em seguida, tente conectar-se novamente em cada protocolo http: // e https: //.

Ivan
fonte
Tenho certeza de que desejo que todo HTTP seja redirecionado para HTTPS, já que estou criando um painel de administração nesse domínio, quase todas as solicitações contêm informações confidenciais. Eu sei que essa sintaxe está correta, pois o redirecionamento funciona perfeitamente. Eu percebi que o problema é que o servidor está à procura de arquivos em / var / www / html em vez do DocumentRoot eu tenha especificado
Michael Longhurst
O caminho do documento funciona sem o redirecionamento? Vale a pena tentar imo ...
Ivan
Eu estou dando a outra resposta uma primeira tentativa, vai dar-lhe atrás, se isso falhar
Michael Longhurst
Deu um que tente também, mas sem sucesso
Michael Longhurst
Tudo bem, tente substituir o asterisco de *: 443 pelo IP real do servidor, o mesmo vale para a porta 80 também. Verifique também a sintaxe do caminho raiz do documento que deve começar com /
Ivan
11

Não me lembro exatamente como descobri, mas me deparei com algo em algum lugar que sugeria colocar:

<VirtualHost _default_:443>

Ao invés de:

<VirtualHost *:443>

Desde que o substituí, meu SSL tem funcionado perfeitamente.

Michael Longhurst
fonte
10

Tente editar seu arquivo para algo parecido com isto:

Este é um conf muito básico, se isso funcionar, adicione seus redirecionamentos, se ainda necessário.

Se isso não funcionar, por favor, mostre seu ssl.conf

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
         <Directory "[docRoot]">
        AllowOverride All
        </Directory>
        DocumentRoot [docRoot]
        ServerName [serverName]
</VirtualHost>

<VirtualHost *:443>
        SSLEngine on
       SSLCertificateFile [...]/[domain].crt
       SSLCertificateKeyFile [...]/[certificate].key
       SSLCertificateChainFile [...]/[theotherone].crt
         <Directory "[docRoot]">
        AllowOverride All
        </Directory>
        DocumentRoot [docRoot]
        ServerName [serverName]
</VirtualHost>
Anthony Fornito
fonte
Não, ainda não funciona, ainda está mostrando o index.html temporário que eu coloquei em / var / www / html. Vou vincular um pastebin com o conf #
Michael Longhurst
Este é o pastebin: pastebin.com/iwubgFye
Michael Longhurst
Apenas para confirmar que você está reiniciando o apache após fazer alterações?
Anthony Fornito 01/12/19
Sim, tudo e qualquer coisa mudança que eu estou reiniciando
Michael Longhurst
Abri todos os arquivos de configuração que consigo imaginar e execute um CTRL + F para encontrar em qualquer lugar que o DocumentRoot esteja definido como "/ var / www / html" e não tenha sido possível encontrar nada. Então eu não posso para a vida de me descobrir por que o Apache está lendo a partir de / var / www / html se ele não está sendo dito para
Michael Longhurst