После включения HTTPS на моем сервере Apache2 - я получаю 404 ошибки на каждый запрос [закрыто]

10

Итак, у меня никогда не было опыта работы с SSL / HTTPS, я когда-либо имел дело только со стандартным HTTP. Недавно я начал работу над сайтом, который будет нуждаться в SSL. Поэтому, конечно, я вышел и исследовал, как и начал. Я дошел до стадии успешной установки сертификата SSL - появляется зеленый замок, и сервер отвечает на запросы HTTPS на порт 443. У меня есть проблема, что независимо от того, что я делаю, я не могу заставить отображаться какие-либо страницы с использованием HTTPS / SSL, однако они нормально выглядели на порту 80 / HTTP (пока я не перенаправлю HTTP на HTTPS).

Проще говоря, я могу получить доступ к HTTPS-сайту абсолютно нормально, однако мои страницы не отправляются, скорее 404 отправляется за каждый запрос.


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

Я не уверен, есть ли что-то еще, на что вы хотели бы взглянуть, или какие-либо другие детали, но если есть, дайте мне знать

РЕДАКТИРОВАТЬ:

После некоторого поиска в файлах конфигурации я установил, что по какой-то причине при подключении к HTTPS сервер использует корневой каталог документа в конфигурации по умолчанию (/ var / www /), однако эта конфигурация по умолчанию не включена с a2ensite. Я не могу понять, где находится конфигурация, которая вызывает это

Майкл Лонгхерст
источник
Ваши Rewriteдирективы выглядят так, как будто вы пытаетесь запустить Apache за плохо настроенным обратным прокси-сервером. Если ваш Apache обслуживает домен напрямую, без прокси, вам нужно просто удалить все Rewriteдирективы и заменить их на одну Redirect. И настройте отдельные файлы журналов для каждого так VirtualHost, чтобы вы могли точно видеть, какой VirtualHostпроцесс обрабатывает каждый запрос.
kasperd
Что касается Rewrites, я использовал их только для получения временного реферата (на этом этапе я не был уверен на 100%), теперь я понял, что Redirect вполне способен на это (да, плохо, что я этого не знал ). Что касается отдельных файлов журнала, я с тех пор сделал это. Я также выяснил, в чем проблема, и буду обновлять, чтобы отразить это.
Майкл Лонгхерст

Ответы:

11

Обязательно ли перенаправлять все http-запросы на https? Потому что, кажется, это то, что вы пытаетесь сделать здесь.

Я предлагаю вам начать с удаления следующих строк из вашего conf:

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

Я подозреваю, что синтаксис может быть неправильным там. Затем попробуйте снова подключиться к каждому протоколу http: // и https: //.

Иван
источник
Я уверен, что я хочу, чтобы весь HTTP перенаправлялся на HTTPS, так как я делаю административную панель в этом домене, почти все запросы содержат конфиденциальную информацию. Я знаю, что этот синтаксис правильный, так как перенаправление работает отлично. Я понял, что проблема в том, что сервер ищет файлы в / var / www / html вместо указанного мной
корня
Работает ли путь документа без перенаправления? Стоит попробовать imo ...
Иван
Сначала я попробую другой ответ, а если не получится, даст его назад
Майкл Лонгхерст
Это тоже попробовалось, но безрезультатно
Майкл Лонгхерст
Хорошо, попробуйте заменить звездочку с *: 443 на фактический IP-адрес сервера, то же самое относится и к порту 80. Также проверьте, что синтаксис корневого пути документа должен начинаться с /
Иван
11

Я не могу точно вспомнить, как я понял это, но я наткнулся на что-то, что предложило поставить:

<VirtualHost _default_:443>

Вместо того:

<VirtualHost *:443>

С тех пор мой SSL работает отлично.

Майкл Лонгхерст
источник
10

Попробуйте отредактировать ваш файл, чтобы он выглядел примерно так:

Это очень простой конф, если это работает, добавьте ваши перенаправления, если они все еще необходимы.

Если это не работает, пожалуйста, покажите свой 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>
Энтони Форнито
источник
Нет, все еще не работает, он все еще показывает временный index.html, который я поместил в / var / www / html. Я свяжу пастбин с конфом
Майкл Лонгхерст
Это пастбина: pastebin.com/iwubgFye
Майкл Лонгхерст
Просто чтобы подтвердить перезапуск apache после внесения изменений?
Энтони Форнито
Да, все, что я изменяю, я перезагружаю
Майкл Лонгхерст
Я открыл каждый файл конфигурации, который я могу себе представить, и запустил CTRL + F, чтобы найти в любом месте, где DocumentRoot установлено значение "/ var / www / html", и ничего не пришло. Поэтому я не могу понять, почему apache читает из / var / www / html, если об этом не говорится
Майкл Лонгхерст