Après avoir activé HTTPS sur mon serveur Apache2 - j'obtiens 404 erreurs à chaque demande [fermé]

10

D'accord, je n'ai jamais eu d'expérience avec SSL / HTTPS auparavant, je n'ai jamais traité qu'avec HTTP standard. Récemment, j'ai commencé à travailler sur un site qui aura besoin de SSL. Alors bien sûr, je suis sorti et j'ai cherché comment et commencé. J'ai réussi à installer le certificat SSL - le cadenas vert apparaît et le serveur répond aux demandes HTTPS sur le port 443. Le problème que j'ai, c'est que peu importe ce que je fais, je ne peux pas faire apparaître de pages en utilisant HTTPS / SSL, cependant, ils semblaient bien sur le port 80 / HTTP (jusqu'à ce que je redirige HTTP vers HTTPS).

En termes simples, je peux accéder au site HTTPS très bien, mais mes pages ne sont pas envoyées, mais un 404 est envoyé pour chaque demande.


/etc/apache2/sites-available/[name

<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>

Je ne sais pas s'il y a autre chose que vous voudrez peut-être regarder, ou tout autre détail, mais si c'est le cas, faites-le moi savoir.

ÉDITER:

Après quelques recherches dans les fichiers de configuration, j'ai établi que pour une raison quelconque, lors de la connexion à HTTPS, le serveur utilise la racine du document dans la configuration par défaut (/ var / www /) mais cette configuration par défaut n'est pas activée avec a2ensite. Je n'arrive pas à comprendre où se trouve la configuration à l'origine de cela

Michael Longhurst
la source
Vos Rewritedirectives donnent l'impression que vous essayez d'exécuter Apache derrière un proxy inverse mal configuré. Si votre Apache sert le domaine directement sans aucun proxy, vous devez simplement supprimer toutes les Rewritedirectives et les remplacer par une seule Redirect. Et configurez des fichiers journaux distincts pour chacun de VirtualHostsorte que vous puissiez voir exactement quel VirtualHostprocessus chaque demande.
kasperd
En ce qui concerne les réécritures, je ne les utilisais que pour obtenir un refirect temporaire (je n'étais pas sûr à 100% à ce stade), j'ai maintenant appris que la redirection est parfaitement capable de cela (ouais, dommage que je ne le savais pas ). En ce qui concerne les fichiers journaux séparés, je l'ai fait depuis. J'ai également compris quel était le problème et mettrai à jour pour refléter cela.
Michael Longhurst

Réponses:

11

Est-il absolument nécessaire de rediriger toutes les requêtes http vers https? Parce qu'il semble que c'est ce que vous essayez de faire ici.

Je vous suggère de commencer par supprimer les lignes suivantes de votre conf:

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

Je soupçonne que la syntaxe peut être erronée là-bas. Essayez ensuite de vous reconnecter sur chaque protocole http: // et https: //.

Ivan
la source
Je suis sûr que je veux que tous les HTTP soient redirigés vers HTTPS, car je crée un panneau d'administration sur ce domaine, presque toutes les demandes contiennent des informations sensibles. Je sais que cette syntaxe est correcte car la redirection fonctionne parfaitement. J'ai pensé que le problème est que le serveur recherche des fichiers dans / var / www / html au lieu du documentroot que j'ai spécifié
Michael Longhurst
Le chemin du document fonctionne-t-il sans la redirection? Ça vaut le coup d'essayer ...
Ivan
J'essaie d'abord à l'autre réponse, je la donnerai si cela échoue
Michael Longhurst
A fait un essai aussi, mais en vain
Michael Longhurst
Très bien, essayez de remplacer l'astérisque de *: 443 par l'IP réelle du serveur, de même pour le port 80. Vérifiez également que la syntaxe du chemin racine du document doit commencer par /
Ivan
11

Je ne me souviens pas exactement comment je l'ai trouvé, mais je suis tombé sur quelque chose quelque part qui a suggéré de mettre:

<VirtualHost _default_:443>

Au lieu de:

<VirtualHost *:443>

Depuis le remplacement de cela, mon SSL fonctionne parfaitement.

Michael Longhurst
la source
10

Essayez de modifier votre fichier pour qu'il ressemble à ceci:

Ceci est une conf très basique, si cela fonctionne, ajoutez vos redirections si nécessaire.

Si cela ne fonctionne pas, veuillez montrer votre 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
la source
Non, cela ne fonctionne toujours pas, il montre toujours le fichier index.html temporaire que j'ai placé dans / var / www / html. Je vais lier une boîte à pâte avec la conf
Michael Longhurst
Ceci est le pastebin: pastebin.com/iwubgFye
Michael Longhurst
Juste pour confirmer que vous redémarrez Apache après avoir apporté des modifications?
Anthony Fornito du
Oui, tout et tout ce que je change, je redémarre
Michael Longhurst
J'ai ouvert tous les fichiers de configuration que je peux imaginer et exécuté un CTRL + F pour trouver n'importe où que le DocumentRoot est défini sur "/ var / www / html" et il n'a rien trouvé. Donc, pour la vie de moi, je ne peux pas comprendre pourquoi apache lit à partir de / var / www / html s'il n'est pas dit à
Michael Longhurst