หลังจากเปิดใช้งาน HTTPS บนเซิร์ฟเวอร์ Apache2 ของฉัน - ฉันได้รับข้อผิดพลาด 404 ทุกคำขอ [ปิด]


10

โอเคฉันไม่เคยมีประสบการณ์กับ SSL / HTTPS มาก่อนเลยฉันเคยจัดการกับ HTTP มาตรฐานเท่านั้น เมื่อเร็ว ๆ นี้ฉันเริ่มทำงานกับไซต์ที่ต้องการ SSL แน่นอนฉันได้ออกไปและค้นคว้าวิธีและเริ่มต้น ฉันได้เข้าสู่ขั้นตอนของการติดตั้งใบรับรอง SSL สำเร็จแล้ว - รหัสล็อคสีเขียวจะปรากฏขึ้นและเซิร์ฟเวอร์ตอบสนองต่อคำขอ HTTPS ที่พอร์ต 443 ปัญหาที่ฉันมีคือไม่ว่าฉันจะทำอะไรก็ตาม 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 หลังพร็อกซีย้อนกลับที่กำหนดค่าไม่ดี ถ้าอาปาเช่ของคุณคือการให้บริการโดเมนโดยตรงโดยไม่ต้อง proxying ใด ๆ คุณก็ควรจะลดลงทั้งหมดของคำสั่งและแทนที่พวกเขามีเพียงหนึ่งเดียวRewrite Redirectและกำหนดค่า logfiles แยกกันสำหรับแต่ละVirtualHostที่คุณสามารถดูว่าVirtualHostกระบวนการใดที่ร้องขอแต่ละ
kasperd

สำหรับ Rewrites ฉันแค่ใช้พวกเขาเพื่อรับ refirect ชั่วคราว (ฉันไม่แน่ใจ 100% ในขั้นตอนนั้น) ตอนนี้ฉันได้เรียนรู้ว่า Redirect นั้นมีความสามารถอย่างสมบูรณ์แบบ (ใช่แย่ที่ฉันไม่รู้ ) เกี่ยวกับไฟล์บันทึกแยกกันฉันได้ทำเช่นนั้นแล้ว ฉันยังได้คิดออกว่าปัญหาคืออะไรและจะปรับปรุงเพื่อสะท้อนให้เห็นว่า
Michael Longhurst

คำตอบ:


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 แทนที่จะเป็นเอกสารที่ฉันได้ระบุไว้
Michael Longhurst

เส้นทางเอกสารทำงานโดยไม่เปลี่ยนเส้นทางหรือไม่ คุ้มค่ากับการลองอิโมะ ...
อีวาน

ฉันจะลองตอบคำถามอื่นก่อนก่อนจะลองใหม่ถ้ามันล้มเหลว
Michael Longhurst

ลองดูด้วย แต่ก็ไม่มีประโยชน์
Michael Longhurst

เอาล่ะลองเปลี่ยนเครื่องหมายดอกจันจาก *: 443 ด้วย IP จริงของเซิร์ฟเวอร์ไปที่พอร์ต 80 เช่นกัน ตรวจสอบไวยากรณ์ของ path path ของเอกสารว่าควรเริ่มต้นด้วย /
Ivan

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 กับ conf
Michael Longhurst

นี่คือ pastebin: pastebin.com/iwubgFye
Michael Longhurst

เพียงเพื่อยืนยันว่าคุณรีสตาร์ท apache หลังจากทำการเปลี่ยนแปลงหรือไม่
Anthony Fornito

ใช่ทุกสิ่งที่ฉันเปลี่ยนฉันเริ่มต้นใหม่
Michael Longhurst

ฉันเปิดทุกไฟล์ config ฉันสามารถจินตนาการและเรียกใช้ CTRL + F เพื่อค้นหาทุกที่ที่ DocumentRoot ถูกตั้งค่าเป็น "/ var / www / html" และไม่มีอะไรเกิดขึ้น ดังนั้นฉันจึงไม่สามารถใช้ชีวิตของฉันได้ว่าเหตุใดอะปาเช่จึงอ่านจาก / var / www / html หากไม่ได้รับการบอกกล่าว
Michael Longhurst
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.