Після ввімкнення HTTPS на моєму сервері Apache2 - я отримую 404 помилки під час кожного запиту [закрито]


10

Гаразд, тому я ніколи раніше не мав досвіду роботи з SSL / HTTPS, я мав справу лише зі стандартним HTTP. Нещодавно я почав працювати над сайтом, який потребуватиме SSL. Звичайно, я вийшов і дослідив, як це зробити, і почав. Я дійшов до етапу успішної установки сертифіката SSL - з'являється зелений замок, і сервер відповідає на запити HTTPS на порт 443. Проблема у мене полягає в тому, що незалежно від того, що я роблю, я не можу змусити будь-які сторінки відображатися за допомогою HTTPS / SSL, однак вони виглядали добре на порту 80 / HTTP (поки я не перенаправляю HTTP на HTTPS, що є).

Простіше кажучи, я можу отримати доступ до сайту HTTPS абсолютно добре, проте мої сторінки не надсилаються, а 404 надсилається на кожен запит.


/etc/apache2/sites-available/ evidencenameSense.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? Тому що здається, що ви тут намагаєтеся зробити.

Я пропоную почати з видалення наступних рядків із конф. Конф.:

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

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


Я впевнений, що хочу, щоб усі HTTP переспрямовували на HTTPS, оскільки я створюю панель адміністратора в цьому домені, майже всі запити містять конфіденційну інформацію. Я знаю, що цей синтаксис є правильним, оскільки перенаправлення працює ідеально. Я зрозумів, що проблема полягає в тому, що сервер шукає файли в / var / www / html замість документа, котрий я вказав
Michael Longhurst

Чи працює шлях документа без перенаправлення? Варто спробувати іммо ...
Іван

Я спробую спершу іншу відповідь, дам її назад, якщо це не вдасться
Майкл Лонгюрст

Дав спробувати теж, але безрезультатно
Майкл Лонгюрст

Добре, спробуйте замінити зірочку з *: 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. Я зв’яжу пастубін з конфліктом
Майклом Лонгюрстом


Просто для підтвердження того, що ви перезапускаєте apache після внесення змін?
Ентоні Форніто

Так, все, і все, що я змінюю, я перезапускаю
Michael Longhurst

Я відкрив кожен конфігураційний файл, який я можу уявити, і запускаю CTRL + F, щоб знайти де завгодно, що DocumentRoot встановлено на "/ var / www / html", і він нічого не придумав. Тож я не можу на все життя зрозуміти, чому apache читає з / var / www / html, якщо про нього не кажуть
Michael Longhurst
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.