Setelah mengaktifkan HTTPS di server Apache2 saya - Saya mendapatkan 404 kesalahan pada setiap permintaan [ditutup]

10

Oke, jadi saya tidak punya pengalaman dengan SSL / HTTPS sebelumnya, saya hanya pernah berurusan dengan HTTP standar. Baru-baru ini saya mulai bekerja di situs yang membutuhkan SSL. Jadi tentu saja, saya sudah keluar dan meneliti bagaimana memulai dan memulai. Saya telah sampai pada tahap menginstal sertifikat SSL berhasil - gembok hijau muncul dan server menanggapi permintaan HTTPS pada port 443. Masalah yang saya miliki adalah tidak masalah apa yang saya lakukan, saya tidak dapat membuat halaman mana pun tampil menggunakan HTTPS / SSL, namun mereka muncul dengan baik pada port 80 / HTTP (sampai saya mengarahkan HTTP ke HTTPS).

Sederhananya saya dapat mengakses situs HTTPS dengan sangat baik, namun halaman saya tidak dikirim, tetapi 404 dikirim untuk setiap permintaan.


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

Saya tidak yakin apakah ada hal lain yang ingin Anda lihat, atau detail lainnya, tetapi jika ada, beri tahu saya.

EDIT:

Setelah beberapa pencarian di dalam file konfigurasi saya telah menetapkan bahwa untuk alasan apa pun, ketika menghubungkan ke HTTPS, server menggunakan root dokumen dalam konfigurasi default (/ var / www /) namun konfigurasi default ini tidak diaktifkan dengan a2ensite. Sepertinya saya tidak tahu di mana konfigurasi yang menyebabkan ini berada

Michael Longhurst
sumber
RewriteArahan Anda terlihat seperti Anda mencoba menjalankan Apache di belakang proxy terbalik yang dikonfigurasi dengan buruk. Jika Apache Anda melayani domain secara langsung tanpa proxy, Anda harus membuang semua Rewritearahan dan menggantinya dengan satu Redirect. Dan konfigurasikan file log terpisah untuk masing VirtualHost- masing sehingga Anda dapat melihat VirtualHostproses mana yang tepat untuk setiap permintaan.
kasperd
Adapun Rewrites, saya hanya menggunakan mereka untuk mendapatkan pengalihan sementara (saya tidak 100% yakin pada tahap itu), saya sekarang telah belajar bahwa Redirect sangat mampu melakukan itu (ya, buruk bahwa saya tidak tahu itu ). Mengenai file log yang terpisah, saya sejak itu melakukan itu. Saya juga sudah tahu apa masalahnya dan akan memperbarui untuk mencerminkan itu.
Michael Longhurst

Jawaban:

11

Apakah benar-benar perlu untuk mengarahkan ulang semua permintaan http ke https? Karena sepertinya itulah yang Anda coba lakukan di sini.

Saya sarankan Anda mulai dengan menghapus baris berikut dari conf Anda:

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

Saya menduga sintaksnya mungkin salah di sana. Kemudian coba sambungkan kembali pada setiap protokol http: // dan https: //.

Ivan
sumber
Saya yakin saya ingin semua HTTP dialihkan ke HTTPS, karena saya membuat panel admin di domain ini, hampir semua permintaan berisi informasi sensitif. Saya tahu bahwa sintaks sudah benar karena pengalihan berfungsi dengan baik. Saya telah menemukan bahwa masalahnya adalah server mencari file di / var / www / html alih-alih documentroot yang telah saya tentukan
Michael Longhurst
Apakah jalur dokumen berfungsi tanpa pengalihan? Pantas untuk dicoba ...
Ivan
Saya memberikan jawaban yang lain terlebih dahulu, akan memberikan yang lalu jika itu gagal
Michael Longhurst
Berikan itu juga mencoba, tetapi tidak berhasil
Michael Longhurst
Baiklah, coba ganti tanda bintang dari *: 443 dengan IP aktual dari server yang sama berlaku untuk port 80 juga. Juga periksa sintaks path root dokumen harus dimulai dengan /
Ivan
11

Saya tidak ingat persis bagaimana saya mengetahuinya, tetapi saya menemukan sesuatu di suatu tempat yang menyarankan untuk meletakkan:

<VirtualHost _default_:443>

Dari pada:

<VirtualHost *:443>

Sejak mengganti itu, SSL saya telah bekerja dengan sempurna.

Michael Longhurst
sumber
10

Coba edit file Anda untuk terlihat seperti ini:

Ini adalah konfigurasi yang sangat mendasar, jika ini berfungsi tambahkan arahan ulang Anda jika masih diperlukan.

Jika ini tidak berhasil, harap tunjukkan ssl.conf Anda

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
sumber
Tidak, masih tidak berfungsi, masih menampilkan index.html sementara yang saya tempatkan di / var / www / html. Saya akan menghubungkan pastebin dengan conf
Michael Longhurst
Ini adalah pastebin: pastebin.com/iwubgFye
Michael Longhurst
Hanya untuk mengonfirmasi bahwa Anda memulai ulang apache setelah melakukan perubahan?
Anthony Fornito
Ya, apa pun dan semua yang saya ubah, saya memulai kembali
Michael Longhurst
Saya telah membuka setiap file konfigurasi yang dapat saya bayangkan dan menjalankan CTRL + F untuk menemukan di mana saja DocumentRoot diatur ke "/ var / www / html" dan telah muncul tanpa apa-apa. Jadi saya tidak bisa untuk kehidupan saya mencari tahu mengapa apache membaca dari / var / www / html jika tidak disuruh
Michael Longhurst