Sau khi bật HTTPS trên máy chủ Apache2 của tôi - tôi nhận được lỗi 404 trên mỗi yêu cầu [đã đóng]


10

Được rồi, vì vậy tôi chưa có kinh nghiệm với SSL / HTTPS trước đây, tôi chỉ từng xử lý HTTP tiêu chuẩn. Gần đây tôi đã bắt đầu làm việc trên một trang web sẽ cần SSL. Vì vậy, tất nhiên, tôi đã ra ngoài và nghiên cứu cách và bắt đầu. Tôi đã đến giai đoạn cài đặt chứng chỉ SSL thành công - ổ khóa màu xanh lá cây xuất hiện và máy chủ phản hồi các yêu cầu HTTPS trên cổng 443. Vấn đề tôi gặp phải là dù tôi có làm gì đi nữa, tôi không thể có bất kỳ trang nào xuất hiện bằng HTTPS / SSL, tuy nhiên chúng xuất hiện tốt trên cổng 80 / HTTP (cho đến khi tôi chuyển hướng HTTP sang HTTPS).

Nói một cách đơn giản, tôi có thể truy cập trang web HTTPS hoàn toàn tốt, tuy nhiên các trang của tôi không được gửi, thay vào đó 404 được gửi cho mỗi yêu cầu.


/etc/apache2/sites-av Available / [name [.

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

Tôi không chắc chắn nếu có bất cứ điều gì khác mà bạn có thể muốn xem, hoặc bất kỳ chi tiết nào khác, nhưng nếu có cho tôi biết.

BIÊN TẬP:

Sau một số tìm kiếm xung quanh trong các tệp cấu hình, tôi đã xác định rằng vì lý do nào, khi kết nối với HTTPS, máy chủ đang sử dụng gốc tài liệu trong cấu hình mặc định (/ var / www /) tuy nhiên cấu hình mặc định này không được bật với a2ensite. Tôi dường như không thể tìm ra nơi cấu hình gây ra điều này được đặt


Các Rewritechỉ thị của bạn trông giống như bạn đang cố chạy Apache phía sau một proxy ngược được cấu hình kém. Nếu Apache của bạn đang phục vụ tên miền trực tiếp mà không cần bất kỳ ủy quyền nào, bạn chỉ nên bỏ tất cả các lệnh Rewritevà thay thế chúng bằng một lệnh Redirect. Và cấu hình các logfiles riêng cho từng VirtualHostcái để bạn có thể thấy chính xác VirtualHostquy trình nào của từng yêu cầu.
kasperd

Đối với các Rewrites, tôi chỉ sử dụng chúng để được chuyển hướng tạm thời (tôi không chắc chắn 100% ở giai đoạn đó), bây giờ tôi đã biết rằng Redirect hoàn toàn có khả năng đó (vâng, thật tệ là tôi không biết điều đó ). Về các tệp nhật ký riêng biệt, tôi đã làm điều đó. Tôi cũng đã tìm ra vấn đề là gì và sẽ cập nhật để phản ánh điều đó.
Michael Longhurst

Câu trả lời:


11

Có nhất thiết phải chuyển hướng tất cả các yêu cầu http sang https không? Vì có vẻ như đó là những gì bạn đang cố gắng làm ở đây.

Tôi đề nghị bạn bắt đầu bằng cách xóa các dòng sau khỏi conf của bạn:

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

Tôi nghi ngờ cú pháp có thể sai ở đó. Sau đó thử kết nối lại trên mỗi giao thức http: // và https: //.


Tôi chắc chắn rằng tôi muốn tất cả HTTP chuyển hướng đến HTTPS, vì tôi đang tạo một bảng quản trị trên miền này, hầu như tất cả các yêu cầu đều chứa thông tin nhạy cảm. Tôi biết rằng cú pháp đó là chính xác vì chuyển hướng hoạt động hoàn hảo. Tôi đã nhận ra rằng vấn đề là máy chủ đang tìm kiếm các tệp trong / var / www / html thay vì tài liệu mà tôi đã chỉ định
Michael Longhurst

Đường dẫn tài liệu có hoạt động mà không có chuyển hướng không? Đáng để thử ...
Ivan

Tôi sẽ đưa ra câu trả lời khác trước, sẽ đưa ra câu trả lời trước nếu thất bại
Michael Longhurst

Đã cố gắng quá, nhưng vô ích
Michael Longhurst

Được rồi, hãy thử thay thế dấu hoa thị từ *: 443 bằng IP thực tế của máy chủ cũng tương tự với cổng 80. Ngoài ra, hãy kiểm tra cú pháp của đường dẫn gốc tài liệu sẽ bắt đầu bằng /
Ivan

11

Tôi không thể nhớ chính xác làm thế nào tôi tìm ra nó, nhưng tôi tình cờ thấy một cái gì đó được đề nghị để đặt:

<VirtualHost _default_:443>

Thay vì:

<VirtualHost *:443>

Kể từ khi thay thế, SSL của tôi đã hoạt động hoàn hảo.


10

Hãy thử chỉnh sửa tệp của bạn để trông giống như thế này:

Đây là một conf rất cơ bản, nếu công việc này thêm chuyển hướng của bạn nếu vẫn cần thiết.

Nếu điều này không hoạt động, vui lòng hiển thị ssl.conf của bạn

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>

Không, vẫn không hoạt động, nó vẫn hiển thị index.html tạm thời mà tôi đã đặt trong / var / www / html. Tôi sẽ liên kết một pastebin với conf
Michael Longhurst


Chỉ để xác nhận bạn đang khởi động lại apache sau khi thực hiện thay đổi?
Anthony Fornito

Vâng, bất cứ điều gì và mọi thứ tôi thay đổi tôi đang khởi động lại
Michael Longhurst

Tôi đã mở mọi tệp cấu hình mà tôi có thể tưởng tượng và chạy CTRL + F để tìm bất cứ nơi nào DocumentRoot được đặt thành "/ var / www / html" và nó không xuất hiện gì cả. Vì vậy, tôi không thể tìm ra lý do tại sao apache đọc từ / var / www / html nếu nó không được nói với
Michael Longhurst
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.