Después de habilitar HTTPS en mi servidor Apache2, obtengo errores 404 en cada solicitud [cerrado]

10

Bien, entonces nunca antes había tenido experiencia con SSL / HTTPS, solo he tratado con HTTP estándar. Recientemente comencé a trabajar en un sitio que necesitará SSL. Entonces, por supuesto, salí e investigué cómo y comencé. Llegué a la etapa de instalar el certificado SSL con éxito: aparece el candado verde y el servidor responde a las solicitudes HTTPS en el puerto 443. El problema que tengo es que no importa lo que haga, no puedo hacer que aparezcan páginas usando HTTPS / SSL, sin embargo, aparecieron bien en el puerto 80 / HTTP (hasta que redirija HTTP a HTTPS).

En pocas palabras, puedo acceder al sitio HTTPS absolutamente bien, sin embargo, mis páginas no se envían, sino que se envía un 404 por cada solicitud.


/etc/apache2/sites-available/[namefont>.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>

No estoy seguro de si hay algo más que desee ver, o cualquier otro detalle, pero si lo hay, hágamelo saber.

EDITAR:

Después de buscar en los archivos de configuración, he establecido que, por cualquier motivo, cuando se conecta a HTTPS, el servidor está utilizando la raíz del documento en la configuración predeterminada (/ var / www /), sin embargo, esta configuración predeterminada no está habilitada con a2ensite. Parece que no puedo entender dónde se encuentra la configuración que está causando esto

Michael Longhurst
fuente
RewriteParece que sus directivas están intentando ejecutar Apache detrás de un proxy inverso mal configurado. Si su Apache está sirviendo el dominio directamente sin ningún proxy, simplemente debe descartar todas las Rewritedirectivas y reemplazarlas por una sola Redirect. Y configure archivos de registro separados para cada uno de VirtualHostmodo que pueda ver exactamente qué VirtualHostproceso cada solicitud.
kasperd
En cuanto a las reescrituras, solo las estaba usando para obtener un reflejo temporal (no estaba 100% seguro en esa etapa), ahora he aprendido que Redirect es perfectamente capaz de eso (sí, mal que no supiera eso ) Con respecto a los archivos de registro separados, desde entonces lo he hecho. También he descubierto cuál era el problema y lo actualizaré para reflejarlo.
Michael Longhurst

Respuestas:

11

¿Es absolutamente necesario redirigir todas las solicitudes http a https? Porque parece que eso es lo que estás tratando de hacer aquí.

Le sugiero que comience eliminando las siguientes líneas de su conf:

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

Sospecho que la sintaxis puede estar equivocada allí. Luego, intente conectarse nuevamente en cada http: // y https: // protocolos.

Ivan
fuente
Estoy seguro de que quiero que todo HTTP se redirija a HTTPS, ya que estoy haciendo un panel de administración en este dominio, casi todas las solicitudes contienen información confidencial. Sé que esa sintaxis es correcta ya que la redirección funciona perfectamente. He pensado que el problema es que el servidor está buscando archivos en / var / www / html en lugar de la documentación documentada que he especificado
Michael Longhurst
¿La ruta del documento funciona sin la redirección? Vale la pena intentarlo ...
Ivan
Primero voy a probar la otra respuesta, la daré si eso falla
Michael Longhurst,
Lo intenté también, pero fue en vano
Michael Longhurst, el
Bien, intente reemplazar el asterisco de *: 443 con la IP real del servidor, lo mismo para el puerto 80 también. Compruebe también que la sintaxis de la ruta raíz del documento debe comenzar con /
Ivan
11

No puedo recordar exactamente cómo lo descubrí, pero me topé con algo que sugirió poner:

<VirtualHost _default_:443>

En lugar de:

<VirtualHost *:443>

Desde que lo reemplacé, mi SSL ha estado funcionando perfectamente.

Michael Longhurst
fuente
10

Intenta editar tu archivo para que se vea así:

Esta es una configuración muy básica, si esto funciona, agregue sus redireccionamientos si aún es necesario.

Si esto no funciona, muestre su 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
fuente
No, todavía no funciona, todavía muestra el index.html temporal que coloqué en / var / www / html. Voy a vincular un pastebin con el conf
Michael Longhurst
Este es el pastebin: pastebin.com/iwubgFye
Michael Longhurst
¿Solo para confirmar que está reiniciando Apache después de hacer cambios?
Anthony Fornito
Sí, cualquier cosa y todo lo que cambio estoy reiniciando
Michael Longhurst
He abierto todos los archivos de configuración que puedo imaginar y ejecuto un CTRL + F para encontrar cualquier lugar donde DocumentRoot esté configurado en "/ var / www / html" y no haya aparecido nada. Entonces, por mi vida, no puedo entender por qué Apache está leyendo de / var / www / html si no se le dice que lo
haga