Score:0

Apache ให้บริการ HTTP แทน HTTPS

ธง tr

ฉันเพิ่งอัปเกรดจาก Apache 2.2 เป็น 2.4 (ฉันรู้ว่าฉันอัปเกรดช้า อย่าเกลียดฉัน) ฉันมีโฮสต์เสมือนต่อไปนี้:

<VirtualHost _default_:30000>
    DocumentRoot /opt/phpmyadmin
    ErrorLog ${APACHE_LOG_DIR}/error.log

    <Directory /opt/phpmyadmin>
        Options -Indexes +IncludesNOEXEC +FollowSymLinks
        Require all granted
    </Directory>
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    LogLevel warn
</VirtualHost>

สิ่งนี้ใช้งานได้ก่อนหน้านี้โดยใช้ อนุญาตจากทั้งหมด ไวยากรณ์และ HTTPS ทำงานได้อย่างสมบูรณ์สำหรับโฮสต์เสมือนอื่นๆ บนพอร์ต 443 อย่างไรก็ตาม เมื่อฉันไปที่ https://localhost:30000ให้บริการเนื้อหา HTTP แทน HTTPS นี่เป็นโฮสต์เสมือนเพียงแห่งเดียวที่ใช้พอร์ต 30000 ดังนั้นฉันจึงสันนิษฐานว่าไม่ได้เกิดจากความขัดแย้งกับโฮสต์เสมือนอื่น ๆ ที่มีความสำคัญ

คำขอ HTTPS:

$ curl -v https://localhost:30000
* สร้าง URL ใหม่เป็น: https://localhost:30000/
* ไม่พบชื่อโฮสต์ในแคช DNS
* พยายาม ::1...
* เชื่อมต่อกับ localhost (::1) พอร์ต 30000 (#0)
* ตั้งค่าตำแหน่งการตรวจสอบใบรับรองสำเร็จแล้ว:
* ไฟล์ CA: ไม่มี
  CApath: /etc/ssl/certs
* SSLv3, การจับมือ TLS, ลูกค้าสวัสดี (1):
* ข้อผิดพลาด:140770FC:รูทีน SSL:SSL23_GET_SERVER_HELLO:โปรโตคอลที่ไม่รู้จัก
* ปิดการเชื่อมต่อ 0
curl: (35) ข้อผิดพลาด:140770FC:รูทีน SSL:SSL23_GET_SERVER_HELLO:โปรโตคอลที่ไม่รู้จัก

สิ่งนี้จะสร้างสิ่งต่อไปนี้ในบันทึกการเข้าถึง Apache:

127.0.0.1:80 XXX.XXX.XXX.149 - - [04/ต.ค./2564:13:14:37 -0400] "\x16\x03\x01\x02" 400 0 "-" "-"

คำขอ HTTP

$ curl -v http://localhost:30000
* สร้าง URL ใหม่เป็น: http://localhost:30000/
* ไม่พบชื่อโฮสต์ในแคช DNS
* พยายาม ::1...
* เชื่อมต่อกับ localhost (::1) พอร์ต 30000 (#0)
> เก็ท / HTTP/1.1
> User-Agent: curl/7.38.0
> โฮสต์: localhost:30000
> ยอมรับ: */*
> 
< HTTP/1.1 200 ตกลง
< วันที่: จันทร์ที่ 04 ต.ค. 2564 16:47:46 น
* เซิร์ฟเวอร์ Apache ไม่ถูกขึ้นบัญชีดำ
< เซิร์ฟเวอร์: อาปาเช่
< แตกต่างกันไป: ยอมรับการเข้ารหัส
< ความยาวเนื้อหา: 481
< ประเภทเนื้อหา: text/html;charset=UTF-8
< 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
 <หัว>
  <title>ดัชนีของ /</title>
 </หัว>
 <เนื้อหา>
<h1>ดัชนีของ /</h1>
  <ตาราง>
   <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O= D">ชื่อ</a></th><th><a href="?C=M;O=A">แก้ไขล่าสุด</a></th><th><a href="?C =S;O=A">ขนาด</a></th><th><a href="?C=D;O=A">รายละเอียด</a></th></tr>
   <tr><th colspan="5"><hr></th></tr>
   <tr><th colspan="5"><hr></th></tr>
</ตาราง>
</body></html>

แก้ไข:

ฉันเพิ่งสังเกตเห็นสิ่งหนึ่ง ฉันมี -ดัชนี ตั้งค่า แต่เนื้อหา HTTP ที่ส่งคืนเป็นดัชนีไดเร็กทอรี ดังนั้นฉันคิดว่าอาจจะมีการใช้โฮสต์เสมือนอื่นอยู่ ฉันยังไม่รู้ว่าเป็นไปได้อย่างไรเนื่องจากนี่เป็นพอร์ตเดียวที่ใช้พอร์ต 30000

Steffen Ullrich avatar
se flag
โปรดตรวจสอบบันทึกข้อผิดพลาดของเซิร์ฟเวอร์เพื่อหาเบาะแส นอกจากนี้ ลองปิดการใช้งาน VirtualHost ที่สมบูรณ์นี้และดูว่าเกิดอะไรขึ้น - การเชื่อมต่อควรล้มเหลวโดยสิ้นเชิง เว้นแต่จะมีสิ่งอื่นที่พอร์ตนี้ทำงานอยู่
tr flag
@SteffenUllrich ไม่มีอะไรที่เกี่ยวข้องอยู่ในบันทึกข้อผิดพลาด
Steffen Ullrich avatar
se flag
นอกจากนี้ `SSLCertificateChainFile` ยังล้าสมัยกับ 2.4
Steffen Ullrich avatar
se flag
*"ไม่มีสิ่งใดที่เกี่ยวข้องอยู่ในบันทึกข้อผิดพลาด"* - คุณอาจพิจารณาว่าข้อมูลบันทึกไม่เกี่ยวข้องแม้ว่าจะไม่ใช่ก็ตาม โปรดแยกการกำหนดค่าเฉพาะเพื่อให้พอร์ต 30000 เป็นสิ่งเดียวในการกำหนดค่า จากนั้นทุกสิ่งที่แสดงในไฟล์บันทึกควรมีความเกี่ยวข้อง นี่เป็นไฟล์บันทึกข้อผิดพลาดเดียวสำหรับ Apache ทั้งหมดหรือไม่ บางทีคุณอาจต้องดูบันทึกอื่นๆ ด้วย
tr flag
@SteffenUllrich สิ่งเดียวในบันทึกข้อผิดพลาดคือข้อความรีสตาร์ทเซิร์ฟเวอร์ และไม่ ไม่ใช่ไฟล์บันทึกข้อผิดพลาดเพียงไฟล์เดียว โฮสต์เสมือนเกือบทั้งหมดมีไฟล์บันทึกเฉพาะของตัวเอง อย่างไรก็ตามฉันพบปัญหาของฉันแล้ว โพสต์คำตอบแล้ว
Score:2
ธง tr

ตกลง ฉันพบปัญหาของฉันแล้ว ก่อนหน้านี้ฉันใช้ /etc/apache2/sites-enabled/domainแต่ฉันต้องเปลี่ยนเป็น /etc/apache2/sites-enabled/domain.conf.

Steffen Ullrich avatar
se flag
คำอธิบายนั้นแปลกสำหรับฉัน อย่างน้อยก็พิจารณาสิ่งที่คุณเขียนในคำถาม หากไม่ได้โหลดการกำหนดค่าสำหรับ VirtualHost นี้เลย พอร์ต 30000 ไม่ควรมีสิ่งใดตอบกลับ เนื่องจากคุณอ้างว่าเป็น VirtualHost แห่งเดียวที่ใช้พอร์ตนี้
tr flag
ฉันมี `Listen 30000` ใน `ports.conf` ดังนั้นฉันเดาว่าต้องมี VirtualHost เริ่มต้นที่ฟังพอร์ตทั้งหมดโดยไม่ต้องระบุทีละพอร์ต การทำ `grep -HR 30000 /etc/apache2/` จะส่งคืนเฉพาะไฟล์ `ports.conf` และโฮสต์เสมือนเดียวที่ฉันตั้งค่าไว้บนพอร์ตนั้น
Steffen Ullrich avatar
se flag
ใช่ ฉันลืมไปว่าสำหรับ Apache เราจำเป็นต้องประกาศพอร์ตที่ใช้ล่วงหน้า

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา