Po włączeniu HTTPS na moim serwerze Apache2 - otrzymuję błędy 404 przy każdym żądaniu [zamknięte]

10

Okej, więc nigdy wcześniej nie miałem doświadczenia z SSL / HTTPS, zawsze miałem do czynienia ze standardowym HTTP. Niedawno zacząłem pracować na stronie, która będzie wymagała SSL. Więc oczywiście wyszedłem i zbadałem, jak to zrobić i jak zacząć. Udało mi się pomyślnie zainstalować certyfikat SSL - pojawia się zielona kłódka, a serwer odpowiada na żądania HTTPS na porcie 443. Mam problem z tym, że bez względu na to, co robię, nie mogę wyświetlić żadnych stron przy użyciu HTTPS / SSL, jednak wyglądały dobrze na porcie 80 / HTTP (dopóki nie przekieruję HTTP na HTTPS).

Mówiąc wprost, mogę uzyskać dostęp do strony HTTPS absolutnie w porządku, jednak moje strony nie są wysyłane, a 404 jest wysyłane za każde żądanie.


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

Nie jestem pewien, czy jest coś jeszcze, na co chciałbyś spojrzeć, czy jakieś inne szczegóły, ale jeśli tak, daj mi znać.

EDYTOWAĆ:

Po kilku przeszukiwaniu plików konfiguracyjnych ustaliłem, że z jakiegokolwiek powodu, podczas łączenia się z HTTPS, serwer używa katalogu głównego dokumentu w domyślnej konfiguracji (/ var / www /), jednak ta domyślna konfiguracja nie jest włączona z a2ensite. Nie mogę ustalić, gdzie znajduje się konfiguracja, która to powoduje

Michael Longhurst
źródło
Twoje Rewritedyrektywy wyglądają, jakbyś próbował uruchomić Apache za źle skonfigurowanym odwrotnym proxy. Jeśli twój Apache obsługuje domenę bezpośrednio, bez pośrednictwa, powinieneś po prostu usunąć wszystkie Rewritedyrektywy i zastąpić je jedną Redirect. I skonfiguruj osobne pliki dziennika dla każdego z VirtualHostnich, abyś mógł dokładnie zobaczyć, który VirtualHostproces przetworzy każde żądanie.
kasperd
Jeśli chodzi o Rewrites, używałem ich tylko do uzyskania tymczasowego przekierowania (na tym etapie nie byłem w 100% pewien), teraz dowiedziałem się, że Przekierowanie jest w pełni do tego zdolne (tak, źle, że tego nie wiedziałem) ). Jeśli chodzi o osobne pliki dziennika, zrobiłem to odtąd. Odkryłem również, na czym polega problem i zaktualizuję go, aby to odzwierciedlić.
Michael Longhurst,

Odpowiedzi:

11

Czy absolutnie konieczne jest przekierowanie wszystkich żądań HTTP na https? Bo wydaje się, że to właśnie próbujesz tutaj zrobić.

Proponuję zacząć od usunięcia następujących wierszy z konf:

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

Podejrzewam, że tam składnia może być niepoprawna. Następnie spróbuj połączyć się ponownie na każdym protokole http: // i https: //.

Ivan
źródło
Jestem pewien, że chcę, aby wszystkie HTTP przekierowywały na HTTPS, ponieważ tworzę panel administracyjny w tej domenie, prawie wszystkie żądania zawierają poufne informacje. Wiem, że ta składnia jest poprawna, ponieważ przekierowanie działa idealnie. Doszedłem do wniosku, że problem polega na tym, że serwer szuka plików w / var / www / html zamiast określonej
przeze
Czy ścieżka dokumentu działa bez przekierowania? Warto spróbować imo ...
Ivan
Najpierw dam drugą odpowiedź, dam jej, jeśli to się nie powiedzie
Michael Longhurst,
Próbowałem też, ale bezskutecznie
Michael Longhurst
W porządku, spróbuj zamienić gwiazdkę z *: 443 na rzeczywisty adres IP serwera, to samo dotyczy również portu 80. Sprawdź również, czy składnia ścieżki katalogu głównego dokumentu powinna zaczynać się od /
Ivan
11

Nie pamiętam dokładnie, jak to wymyśliłem, ale natknąłem się na coś, co sugerowało, że mogę powiedzieć:

<VirtualHost _default_:443>

Zamiast:

<VirtualHost *:443>

Od czasu zastąpienia tego mój protokół SSL działa idealnie.

Michael Longhurst
źródło
10

Spróbuj edytować plik, aby wyglądał mniej więcej tak:

Jest to bardzo proste conf, jeśli to działa, dodaj przekierowania, jeśli nadal są potrzebne.

Jeśli to nie zadziała, pokaż swój 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
źródło
Nie, nadal nie działa, nadal wyświetla tymczasowy plik index.html, który umieściłem w / var / www / html. Połączę pastebin z konf
Michael Longhurst
To jest pastebin: pastebin.com/iwubgFye
Michael Longhurst
Żeby potwierdzić, że restartujesz apache po wprowadzeniu zmian?
Anthony Fornito,
Tak, wszystko i wszystko, co zmieniam
Ponownie
Otworzyłem każdy plik konfiguracyjny, jaki mogę sobie wyobrazić i uruchomiłem CTRL + F, aby znaleźć wszędzie, gdzie DocumentRoot jest ustawiony na „/ var / www / html” i nic nie wymyślił. Więc nie mogę z mojego życia zrozumieć, dlaczego apasz czyta z / var / www / html, jeśli nie jest to
nakazane