เมื่อ Nextcloud แจ้งว่า “ส่วนหัว HTTP Strict-Transport-Security ไม่ได้ถูกกำหนดค่า” การแก้ไขควรอยู่ที่เลเยอร์การให้บริการตอบสนอง HTTPS เช่น Apache, Nginx หรือพร็อกซีแบบย้อนกลับสาธารณะที่ยุติ TLS คู่มือการดูแลระบบปัจจุบันของ Nextcloud ระบุว่าส่วนหัวที่หายไปหรือ เวลา max-ageที่ต่ำกว่าที่15552000กำหนดเป็นสัญญาณเตือนด้านความปลอดภัย เมื่อส่วนหัวปรากฏบนปลายทาง HTTPS สาธารณะแล้ว เบราว์เซอร์จะสามารถจดจำได้ว่าโฮสต์ต้องใช้ HTTPS ในช่วงเวลาที่กำหนด
การเปลี่ยนแปลงพื้นฐานนั้นเล็กน้อย แต่ขอบเขตของมันมีความสำคัญ ให้ใช้ HSTS เฉพาะกับเอนด์พอยต์ HTTPS ที่ใช้งานได้และมีใบรับรองที่ถูกต้องเท่านั้น เริ่มต้นด้วยโฮสต์เพียงอย่างเดียว เพิ่มincludeSubDomainsหรือpreloadแก้ไขเมื่อโฮสต์เนมที่ได้รับผลกระทบทั้งหมดพร้อมใช้งาน HTTPS แล้ว คู่มือนี้อ้างอิงจากเอกสารการดูแลระบบ Nextcloud ที่มีให้ใช้งานในเดือนตุลาคม 2026 รวมถึงคำแนะนำเกี่ยวกับคำเตือนด้านความปลอดภัยและ คำแนะนำ เกี่ยวกับการเสริมความแข็งแกร่งของเซิร์ฟเวอร์
คำเตือนนั้นหมายความว่าอย่างไร
HTTP Strict Transport Security (HSTS) คือส่วนหัวการตอบกลับที่บอกให้เบราว์เซอร์ใช้ HTTPS สำหรับการร้องขอไปยังชื่อโฮสต์ในอนาคต ช่วยป้องกันไม่ให้เบราว์เซอร์เปลี่ยนกลับไปใช้ HTTP แบบข้อความธรรมดาหลังจากที่ได้รับนโยบายผ่านการเชื่อมต่อ HTTPS ที่ถูกต้องแล้ว Nextcloud จะตรวจสอบการตอบกลับสาธารณะและแจ้งเตือนเมื่อไม่พบนโยบายที่มีอายุการใช้งานขั้นต่ำตามที่แนะนำ
HSTS ไม่สามารถใช้ทดแทนการเปิดใช้งาน TLS หรือการเปลี่ยนเส้นทาง HTTP ไปยัง HTTPS ได้ เบราว์เซอร์จะยอมรับเฉพาะนโยบาย HSTS ที่ส่งผ่าน HTTPS เท่านั้น ในการเข้าชมครั้งแรก ก่อนที่เบราว์เซอร์จะเรียนรู้นโยบาย คำขอเริ่มต้นอาจยังคงมีความเสี่ยง เว้นแต่ชื่อโฮสต์จะถูกครอบคลุมโดยรายการพรีโหลดของเบราว์เซอร์ การเปลี่ยนเส้นทาง HTTP ไปยัง HTTPS แบบปกติยังคงมีประโยชน์ แต่ไม่สามารถทดแทนส่วนหัวได้
ตรวจสอบว่าเซิร์ฟเวอร์ใดควรส่งส่วนหัว
ตรวจสอบการร้องขอสาธารณะก่อนเปลี่ยนแปลงการตั้งค่า หากผู้ใช้เชื่อมต่อโดยตรงกับ Apache หรือ Nginx ผ่าน HTTPS ให้กำหนดค่าโฮสต์เสมือน TLS ของเว็บเซิร์ฟเวอร์นั้น หากโหลดบาลานเซอร์ อินเกรส CDN หรือรีเวิร์สพร็อกซีจัดการ TLS สาธารณะ ให้กำหนดค่าเลเยอร์ที่ส่งการตอบกลับไปยังเบราว์เซอร์ การเพิ่มส่วนหัวเฉพาะในการเชื่อมต่อ HTTP ภายในอาจไม่มีผลต่อการตอบกลับสาธารณะ
Nextcloud ระบุว่า Reverse Proxy เป็นรูปแบบการใช้งานที่ได้รับการสนับสนุน และกำหนดให้ผู้ดูแลระบบต้องกำหนด Trusted Proxy เมื่อจำเป็น หน้าที่ในการจัดการ HSTS ของ Proxy นั้นแยกต่างหากจากการจัดการ URL และ IP ของไคลเอ็นต์ของ Nextcloud โดยเฉพาะอย่างยิ่ง การoverwriteprotocolตั้งค่านี้จะช่วยให้ Nextcloud จดจำรูปแบบภายนอกในรูปแบบ Proxy บางแบบได้ การตั้งค่านี้ไม่ได้เพิ่มส่วนหัวการตอบสนอง HSTS โดยอัตโนมัติ โปรดตรวจสอบคู่มือการกำหนดค่า Reverse Proxy อย่างเป็นทางการของ Nextcloudหากแอปพลิเคชันสร้างลิงก์ HTTP หรือรายงานคำเตือนอื่นๆ ที่เกี่ยวข้องกับ Proxy
ก่อนที่จะเปลี่ยนแปลงนโยบาย
- ยืนยันว่า
https://cloud.example.comการโหลดเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาดเกี่ยวกับใบรับรอง และใช้ห่วงโซ่ใบรับรองที่ตั้งใจไว้ - ตรวจสอบว่าคำขอ HTTP ส่งต่อไปยังชื่อโฮสต์เดียวกันผ่าน HTTPS หรือไม่
- ตรวจสอบบริการและโดเมนย่อยอื่นๆ ที่อยู่ภายใต้โดเมนหลักเดียวกันก่อน
includeSubDomainsพิจารณา - ควรเปิดใช้งานเส้นทางการดูแลระบบหรือคอนโซลเซิร์ฟเวอร์ไว้เสมอ เบราว์เซอร์ที่แคช HSTS ไว้จะไม่อนุญาตให้ผู้ใช้ข้ามขั้นตอนการแก้ไขข้อผิดพลาดของใบรับรองในช่วงระยะเวลาตามนโยบาย
แทนที่cloud.example.comในตัวอย่างด้วยชื่อโฮสต์ Nextcloud จริงของคุณ ห้ามคัดลอกชื่อโฮสต์ตัวอย่างไปใช้ในการตั้งค่าใช้งานจริง
ตั้งค่า HSTS ใน Apache
ในโฮสต์เสมือน Apache TLS ที่ให้บริการ Nextcloud ให้เปิดใช้งานโมดูลส่วนหัวและเพิ่มนโยบาย คู่มือการเพิ่มความปลอดภัยของ Nextcloud แสดงค่าหกเดือนและใช้งานincludeSubDomainsเวอร์ชันเฉพาะโฮสต์ต่อไปนี้ ซึ่งเป็นจุดเริ่มต้นที่ระมัดระวัง:
<VirtualHost *:443>
ServerName cloud.example.com
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000"
</IfModule>
# Existing Nextcloud and TLS directives
</VirtualHost>
ตรวจสอบให้แน่ใจmod_headersว่าได้เปิดใช้งานในการตั้งค่า Apache ของระบบปฏิบัติการของคุณแล้ว เพิ่มคำสั่งลงในโฮสต์เสมือน HTTPS ไม่ใช่โฮสต์เสมือนพอร์ต 80 ตรวจสอบความถูกต้องของการกำหนดค่าโดยใช้คำสั่งที่เหมาะสมสำหรับระบบปฏิบัติการที่ติดตั้ง จากนั้นโหลด Apache ใหม่โดยใช้ตัวจัดการบริการ ตัวอย่างเช่น ระบบปฏิบัติการที่ใช้ systemd หลายระบบรองรับคำสั่งsudo apachectl configtestตามด้วยsudo systemctl reload apache2; ในบางระบบปฏิบัติการ บริการจะมีชื่อว่าhttpd. ใช้คำสั่งที่ตรงกับชื่อแพ็กเกจและชื่อบริการของคุณ
ตั้งค่า HSTS ใน Nginx
ในบล็อก Nginx serverที่รับฟังการเชื่อมต่อ HTTPS และให้บริการชื่อโฮสต์สาธารณะของ Nextcloud ให้เพิ่ม:
server {
listen 443 ssl;
server_name cloud.example.com;
add_header Strict-Transport-Security "max-age=15552000" always;
# Existing certificate and Nextcloud configuration
}
พารามิเตอร์ นี้alwaysทำให้ Nginx เพิ่มส่วนหัวโดยไม่คำนึงถึงสถานะการตอบสนอง Nginx ได้ระบุถึงกฎการสืบทอดที่อาจทำให้ผู้ใช้งานประหลาดใจ: add_headerคำสั่งในระดับการกำหนดค่าที่ต่ำกว่าจะเปลี่ยนพฤติกรรมการสืบทอดตามปกติ หากlocationบล็อกที่ซ้อนกันกำหนดคำสั่งของตนเองadd_headerส่วนหัว HSTS ระดับเซิร์ฟเวอร์อาจไม่ถูกสืบทอดอีกต่อไป ตรวจสอบการกำหนดค่าที่ใช้งานอยู่และทดสอบ URL ตัวอย่าง รวมถึงหน้าเข้าสู่ระบบและทรัพยากรแบบคงที่ ดู เอกสารประกอบโมดูลส่วนหัว ของNginx อย่างเป็นทางการ
ก่อนทำการเปลี่ยนแปลงใดๆ ให้รันคำสั่ง `nginx` ก่อน sudo nginx -tหากการตรวจสอบความถูกต้องสำเร็จ ให้รีโหลด Nginx โดยใช้คำสั่ง `service` สำหรับระบบของคุณ ซึ่งมักจะเป็น `nginx` หากsudo systemctl reload nginxการทดสอบไวยากรณ์ล้มเหลว ควรแก้ไขก่อนรีโหลด
กำหนดค่าพร็อกซีแบบย้อนกลับหรือตัวยุติ TLS
หากการเชื่อมต่อ HTTPS สาธารณะสิ้นสุดที่พร็อกซีแบบย้อนกลับ ให้ใส่ส่วนหัว HSTS ในการตอบสนอง HTTPS ของพร็อกซีนั้น ตัวอย่างเช่น พร็อกซีอาจส่งส่วนหัว HSTS แม้ว่าการเชื่อมต่อกับแบ็กเอนด์ของ Nextcloud จะใช้ HTTP ก็ตาม อย่าส่งส่วนหัว HSTS เฉพาะในการตอบสนองแบ็กเอนด์ที่ไม่ได้เข้ารหัส และคิดว่าเบราว์เซอร์จะเห็นส่วนหัวนั้น
ตรวจสอบว่าทั้งพร็อกซีและแบ็กเอนด์ได้เพิ่มส่วนหัวเดียวกันแล้วหรือไม่ ฟิลด์ HSTS ที่ซ้ำกันอาจทำให้การวินิจฉัยสับสน และพร็อกซีอาจเขียนทับหรือซ่อนส่วนหัวของแบ็กเอนด์ เลือกเลเยอร์ที่มองเห็นได้จากภายนอกเพียงเลเยอร์เดียวเพื่อเป็นเจ้าของนโยบาย หรือกำหนดค่าเลเยอร์อย่างจงใจเพื่อให้เบราว์เซอร์ได้รับค่าที่ชัดเจนเพียงค่าเดียว หลังจากเปลี่ยนพร็อกซีแล้ว ให้ยืนยันว่าพร็อกซีส่งต่อโฮสต์และรูปแบบที่คาดหวังไปยัง Nextcloud และลิงก์ HTTPS ยังคงใช้งานได้
ตรวจสอบการตอบรับจากสาธารณชน
โปรดส่งคำขอไปยังชื่อโฮสต์ HTTPS สาธารณะ ไม่ใช่แค่ localhost หรือที่อยู่แบ็กเอนด์เท่านั้น:
curl -sSI https://cloud.example.com
curl -sSIL http://cloud.example.com
ในคำตอบแรก ให้มองหาหัวข้อที่คล้ายกับข้อความต่อไปนี้อย่างน้อยหนึ่งหัวข้อ:
Strict-Transport-Security: max-age=15552000
คำสั่งที่สองจะตามหลังการเปลี่ยนเส้นทาง ตรวจสอบให้แน่ใจว่า URL HTTP เข้าถึงชื่อโฮสต์ HTTPS ที่ต้องการ จากนั้นตรวจสอบการตอบสนอง HTTPS เพื่อหา HSTS เบราว์เซอร์จะไม่สนใจ HSTS ที่ได้รับผ่าน HTTP ธรรมดา ดังนั้นส่วนหัวจึงไม่จำเป็นต้องปรากฏในการเปลี่ยนเส้นทางพอร์ต 80 ครั้งแรก คุณยังสามารถใช้เครื่องมือสำหรับนักพัฒนาเบราว์เซอร์ได้: เปิดแผงเครือข่าย โหลดหน้า HTTPS ใหม่ เลือกการตอบสนองเอกสาร และตรวจสอบส่วนหัวการตอบสนอง
หากการกำหนดค่าของคุณมีตำแหน่งที่ตั้งซ้อนกัน ระดับพร็อกซีหลายระดับ หรือการจัดการสินทรัพย์คงที่แยกต่างหาก โปรดตรวจสอบเส้นทางการตอบกลับมากกว่าหนึ่งเส้นทาง จากนั้นกลับไปที่การตั้งค่าการดูแลระบบของ Nextcloud และรีเฟรชภาพรวมความปลอดภัย คำเตือนอาจใช้เวลาในการรีเฟรช หรืออาจแสดง URL สาธารณะที่ Nextcloud ตรวจสอบอย่างแม่นยำ ดังนั้นโปรดเปรียบเทียบ URL นั้นกับ URL ที่คุณทดสอบ
เลือกขอบเขตและระยะเวลาการใช้งานอย่างรอบคอบ
ระยะ เวลาของข้อความแจ้งเตือนเป็นวินาที max-ageเท่ากับ15552000หกเดือน ซึ่งตรงกับเกณฑ์การแจ้งเตือนที่ Nextcloud ระบุไว้ นโยบายจะได้รับการต่ออายุเมื่อเบราว์เซอร์ได้รับส่วนหัว HSTS ที่ถูกต้องใหม่ การย่อหรือลบนโยบายในภายหลังจำเป็นต้องส่งข้อมูลmax-age=0ผ่าน HTTPS ไปยังชื่อโฮสต์ที่ได้รับผลกระทบแต่ละแห่ง เบราว์เซอร์ที่ไม่กลับมาเยี่ยมชมอีกครั้งในระหว่างการเปลี่ยนแปลงจะยังคงรักษานโยบายที่แคชไว้จนกว่าอายุการใช้งานปัจจุบันจะหมดอายุ
includeSubDomainsนโยบายนี้ใช้กับทุกโดเมนย่อยภายใต้ชื่อโฮสต์ ใช้เฉพาะเมื่อโดเมนย่อยปัจจุบันและที่วางแผนไว้ทั้งหมดรองรับ HTTPS พร้อมใบรับรองที่ถูกต้อง บริการแยกต่างหาก เช่นmail.example.comหรือlegacy.example.comอาจไม่สามารถเข้าถึงได้โดยเบราว์เซอร์หากยังไม่พร้อมใช้งาน
การเพิ่ม โทpreloadเค็นเป็นการตัดสินใจที่แยกต่างหากและมีผลกระทบสูง คำแนะนำด้านความปลอดภัยของ Nextcloud อธิบายถึงการเพิ่มชื่อโฮสต์ลงในรายการโหลดล่วงหน้าของเบราว์เซอร์ และเตือนว่าการลบอาจใช้เวลาหลายเดือนกว่าจะถึงเบราว์เซอร์ที่ติดตั้งไว้ อย่าเพิ่มโทเค็นเพื่อเป็นวิธีลัดในการล้างสิ่งที่สแกนเนอร์ตรวจพบ ตรวจสอบเงื่อนไขการโหลดล่วงหน้าที่จำเป็นทั้งหมดและผลกระทบต่อโดเมนย่อยทุกโดเมนก่อน ปฏิบัติตามคำแนะนำอย่างเป็นทางการของบริการ HSTS Preloadหากคุณต้องการขอให้รวมไว้ในรายการ
หากคำเตือนยังคงอยู่
- ส่วนหัวของคำสั่ง curl หายไป:คุณอาจแก้ไขค่า virtual host, proxy หรือตำแหน่ง Nginx ผิด ตรวจสอบเป้าหมาย DNS สาธารณะและการกำหนดค่าเซิร์ฟเวอร์ที่ใช้งานอยู่
- ส่วนหัวจะปรากฏเฉพาะในบางหน้าเท่านั้น:โปรดตรวจสอบคำสั่ง Nginx ที่ซ้อนกัน
add_headerการจัดการข้อผิดพลาด เส้นทางของไฟล์คงที่ และกฎพร็อกซี - การตอบสนองมีนโยบายหลายประการ:ค้นหาว่าเลเยอร์ใดเพิ่มฟิลด์นั้น และรวมเข้าเป็นค่าเดียวที่สอดคล้องกัน
- ส่วนหัวปรากฏอยู่ แต่คำเตือนยังคงปรากฏอยู่:ตรวจสอบว่า URL ที่กำหนดค่าไว้ภายนอกของ Nextcloud นั้นชี้ไปยังปลายทาง HTTPS เดียวกัน ตรวจสอบการจัดการรูปแบบพร็อกซี จากนั้นโหลดภาพรวมผู้ดูแลระบบใหม่
- HTTPS หรือใบรับรองไม่พร้อมใช้งาน:แก้ไข TLS และการกำหนดเส้นทาง HTTP เป็น HTTPS ก่อน HSTS ไม่สามารถซ่อมแซมใบรับรองที่เสียหายหรือเปิดใช้งาน HTTPS ได้ด้วยตัวเอง
การแก้ไขจะเสร็จสมบูรณ์เมื่อการตอบสนอง HTTPS สาธารณะมีค่า HSTS ที่ต้องการอย่างสม่ำเสมอ Nextcloud สามารถเข้าถึง URL HTTPS สาธารณะได้อย่างถูกต้อง และเบราว์เซอร์สามารถโหลดอินสแตนซ์ได้โดยไม่มีข้อผิดพลาดเกี่ยวกับใบรับรองหรือการเปลี่ยนเส้นทาง HSTS ช่วยปรับปรุงการบังคับใช้นโยบายการขนส่งสำหรับเบราว์เซอร์ที่ส่งคืนข้อมูล แต่ไม่ได้ทดแทนการบำรุงรักษาใบรับรอง การกำหนดค่าพร็อกซีที่ปลอดภัย หรือเส้นทางการกู้คืนที่ผ่านการทดสอบแล้ว